Hallo Zusammen,
ich habe einen kontinuierlichen Datenstrom an Messwerten von einem Messgerät, die ich gerne in einem Scatterplot darstellen würde.
Die Werte werden quasi als Lissajous Graf dargestellt.
Ich möchte aber immer nur die letzen z.B. 500 Werte darstellen.
Also wenn mein series1.getItemCount() >= 500 ist, möchte ich das erste Item wieder vergessen und dann das neue Item einfügen.
Der Codeausschnitt dazu sieht bei mir aktuell so aus:
Das ganze läuft in einer Schleife recht schnell durch. (Die Initialisierung der Point Variable läuft nicht in der Schleife)
Ich bekomme jedoch immer wieder, aber nicht immer folgenden Fehler:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 499, Size: 499
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at org.jfree.data.xy.XYSeries.getRawDataItem(XYSeries.java:634)
at org.jfree.data.xy.XYSeries.getX(XYSeries.java:645)
at org.jfree.data.xy.XYSeriesCollection.getX(XYSeriesCollection.java:358)
at org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:77)
at org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawSecondaryPass(XYLineAndShapeRenderer.java:1121)
at org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawItem(XYLineAndShapeRenderer.java:916)
at org.jfree.chart.plot.XYPlot.render(XYPlot.java:3738)
at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3271)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1229)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1628)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Kann mir jemand helfen, warum dieser Fehler auftritt und was ich tun kann, damit das stabil läuft?
Vielen Dank und Gruß
ich habe einen kontinuierlichen Datenstrom an Messwerten von einem Messgerät, die ich gerne in einem Scatterplot darstellen würde.
Die Werte werden quasi als Lissajous Graf dargestellt.
Ich möchte aber immer nur die letzen z.B. 500 Werte darstellen.
Also wenn mein series1.getItemCount() >= 500 ist, möchte ich das erste Item wieder vergessen und dann das neue Item einfügen.
Der Codeausschnitt dazu sieht bei mir aktuell so aus:
Java:
Point pCh1 = new Point();
pCh1 = GetCoordinates(swRawX, s2wRawX);
series1.add(pCh1.x, pCh1.y);
if(series1.getItemCount() >= 500) {
series1.remove(0);
}
panel.validate();
Das ganze läuft in einer Schleife recht schnell durch. (Die Initialisierung der Point Variable läuft nicht in der Schleife)
Ich bekomme jedoch immer wieder, aber nicht immer folgenden Fehler:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 499, Size: 499
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at org.jfree.data.xy.XYSeries.getRawDataItem(XYSeries.java:634)
at org.jfree.data.xy.XYSeries.getX(XYSeries.java:645)
at org.jfree.data.xy.XYSeriesCollection.getX(XYSeriesCollection.java:358)
at org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:77)
at org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawSecondaryPass(XYLineAndShapeRenderer.java:1121)
at org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawItem(XYLineAndShapeRenderer.java:916)
at org.jfree.chart.plot.XYPlot.render(XYPlot.java:3738)
at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3271)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1229)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1628)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Kann mir jemand helfen, warum dieser Fehler auftritt und was ich tun kann, damit das stabil läuft?
Vielen Dank und Gruß