【问题标题】:Java not catching exception being thrown from "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException:Java 未捕获从“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException 引发的异常:
【发布时间】:2021-11-27 21:03:11
【问题描述】:

我有一段代码,我用一个带有最常见异常的 try catch 块包围,但它永远不会被捕获,因为我的 catch 语句中的逻辑永远不会执行并且程序继续运行。

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);
}

代码使用 jfree 库在图表上绘制一些信息。这是打印到控制台但从未被捕获的异常。

线程“AWT-EventQueue-0”中的异常 java.lang.IndexOutOfBoundsException:索引:0,大小:0 在 java.util.ArrayList.rangeCheck(ArrayList.java:659) 在 java.util.ArrayList.get(ArrayList.java:435) 在 org.jfree.data.xy.XYSeriesCollection.getX(XYSeriesCollection.java:357) 在 org.jfree.data.xy.AbstractXYDataset.getXValue(AbstractXYDataset.java:75) 在 org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawSecondaryPass(XYLineAndShapeRenderer.java:1142) 在 org.jfree.chart.renderer.xy.XYLineAndShapeRenderer.drawItem(XYLineAndShapeRenderer.java:927) 在 org.jfree.chart.plot.XYPlot.render(XYPlot.java:3828) 在 org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3389) 在 org.jfree.chart.JFreeChart.draw(JFreeChart.java:1237) 在 org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1677) 在 javax.swing.JComponent.paint(JComponent.java:1056) 在 javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) 在 javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579) 在 javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502) 在 javax.swing.RepaintManager.paint(RepaintManager.java:1272) 在 javax.swing.JComponent._paintImmediately(JComponent.java:5158) 在 javax.swing.JComponent.paintImmediately(JComponent.java:4969) 在 javax.swing.RepaintManager$4.run(RepaintManager.java:831) 在 javax.swing.RepaintManager$4.run(RepaintManager.java:814) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) 在 javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) 在 javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) 在 javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) 在 javax.swing.RepaintManager.access$1200(RepaintManager.java:64) 在 javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) 在 java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3.run(EventQueue.java:703) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

如何正确捕获此异常?我已经尝试将特定异常“java.lang.IndexOutOfBoundsException”复制并粘贴到 catch 块中。

【问题讨论】:

    标签: java exception nullpointerexception jfreechart awt-eventqueue


    【解决方案1】:

    problematicFunction 方法可能会更改某些数据并间接导致异常,但异常会在 AWT-EventQueue-0 线程上引发,这很可能是不同的线程。这看起来像是jfree 库中的一个错误,或者您可能违反了 API,因为您没有在 Swing/AWT 事件线程上调用 problematicFunction。哪种情况在很大程度上取决于您的代码,您应该将其包含在您的问题中。

    【讨论】:

    • 我用一些伪代码更新了我的帖子。我没有编写我正在处理的完整代码,所以我什至不知道它与线程有关,因为我在任何地方都看不到任何线程创建或相关代码。不过,问题出在线程上是有道理的(也许它正试图无序地从集合中添加或删除对象)。有没有办法强制代码不使用线程,或者只使用一个线程?
    • jfreechart 是纯Java2D;相反,swing 不是线程安全的;你可以检查像this这样的违规行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多