IndexOutOfBoundException TimeSeries

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
PollerJava
Posts: 81
Joined: Wed Jul 25, 2007 10:40 am

IndexOutOfBoundException TimeSeries

Post by PollerJava » Mon Feb 02, 2009 2:04 pm

Hello,

I get only somethimes!!! the exception at the bottom when the method createDatasetWithExistingSerie is invoked.

Does anybody know what I am doing wrong?

Thank for your help,


Code: Select all


private void createDatasetWithExistingSerie(final TracePanelTimeSeries series, final String name, final RegularTimePeriod start, final List<DBWertReadBean> lineData, final int lineCnt, final TracePanelXYItemRenderer renderer, final String unit, final int lineIndex) {        
        xAxis = (DateAxis) ((XYPlot)chartPanel.getChart().getPlot()).getDomainAxis();
        setMaximumxAxisItemAge(series, (long)xAxis.getUpperBound());
        clearSerie(series);
        for(DBWertReadBean element : lineData) {           
            int millis = element.getZeitstempel().getNanos()/(int)Math.pow(10, 6);
            Millisecond ms = new Millisecond(millis, new Second(element.getZeitstempel()));
            series.add(ms, element.getWert());
            }        
        setMaximumxAxisItemAge(series, (long)xAxis.getRange().getLength());                 // only the items in the xAxis timerange are available
        }




Code: Select all

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.get(ArrayList.java:322)
        at org.jfree.data.time.TimeSeries.getDataItem(TimeSeries.java:338)
        at org.jfree.data.time.TimeSeriesCollection.getXValue(TimeSeriesCollection.java:421)
        at org.jfree.chart.renderer.xy.StandardXYItemRenderer.drawItem(StandardXYItemRenderer.java:835)
        at org.jfree.chart.plot.XYPlot.render(XYPlot.java:3717)
        at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3289)
        at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1230)
        at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1344)
        at javax.swing.JComponent.paint(JComponent.java:1022)
        at javax.swing.JComponent.paintToOffscreen(JComponent.java:5104)
        at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1386)
        at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1317)
        at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:301)
        at javax.swing.RepaintManager.paint(RepaintManager.java:1132)
        at javax.swing.JComponent._paintImmediately(JComponent.java:5052)
        at javax.swing.JComponent.paintImmediately(JComponent.java:4862)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:727)
        at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:683)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:663)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


david.gilbert
JFreeChart Project Leader
Posts: 11734
Joined: Fri Mar 14, 2003 10:29 am
antibot: No, of course not.
Contact:

Post by david.gilbert » Mon Feb 02, 2009 9:47 pm

This exception normally occurs when the chart is being repainted in one thread, while the dataset is being updated in another thread. JFreeChart is not thread safe, so you need to ensure that your dataset updates happen in the event dispatch thread (SwingUtilities.invokeLater). An if you are adding multiple items to a dataset, each add will trigger a chart update...so you might want to disable the change event notification until you have added all the items.
David Gilbert
JFreeChart Project Leader

:idea: Read my blog
:idea: Support JFree via the Github sponsorship program

Locked