I have a block of code that I surrounded with a try catch block with the most general exception, yet it never gets caught since the logic in my catch statement never executes and the program continues.
try{
add an XYSeries object to a jfree XYSeriesCollection.
// do unrelated stuff
remove said series from the XYSeriesCollection.
}
catch(Exception e){
e.printStackTrace();
System.exit(-1);
}
The code plots some info on a chart with the jfree library. Here is the exception that is printed out to the console but is never caught.
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:659) at java.util.ArrayList.get(ArrayList.java:435) at org.jfree.data.xy.XYSeriesCollection.getX(XYSeriesCollection.java:357) at org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:75) at org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawSecondaryPass(XYLineAndShapeRenderer.java:1142) at org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawItem(XYLineAndShapeRenderer.java:927) at org.jfree.chart.plot.XYPlot.render(XYPlot.java:3828) at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3389) at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1237) at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1677) 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)
How can I catch this exception correctly? I've already tried copying and pasting in the specific exception 'java.lang.IndexOutOfBoundsException' into the catch block as well.
The
problematicFunction
method might be changing some data and indirectly cause the exception, but the exception gets thrown on theAWT-EventQueue-0
thread, which is very likely a different thread. This either looks like a bug in thejfree
library, or you might be violating API by not callingproblematicFunction
on the Swing/AWT event thread. Which one is the case is very dependent on your code, which you should include in your question.