我目前正在使用JFreeChat,以便用Java绘制一些图表。实际的绘图是一个相当大的项目的一部分,这不允许我轻松地包含更多的代码。对我来说,这个异常似乎是直接抛出的。
来自JFreeChart组件。如果有人能帮上忙,我将不胜感激。有没有办法更详细地追踪异常抛出的确切位置?我读到,在列表迭代的情况下,通常会抛出异常,同时从同一列表中删除元素(这不是我现在正在做的)。
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at org.jfree.chart.plot.XYPlot.drawAnnotations(XYPlot.java:3972)
at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:3339)
at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1229)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1624)
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.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:306)
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:80)
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:756)
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:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
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)诚挚的问候。
发布于 2017-09-14 07:47:42
版本1.0.19中第3972行的drawAnnotations()源代码显示为here;它没有什么特别之处,功能正常。如果无意中使顶级容器可见或更新了initial thread上的绘图数据集,则可能会出现问题。所产生的更新事件将在event dispatch thread上执行,可能会导致争用情况。Swing要求您仅在event dispatch thread上构造和操作Swing GUI对象。如果错误代码不明显,请尝试here所示的方法来检测潜在的违规。
发布于 2017-09-14 04:19:05
我会说你有另一个线程正在修改注释列表。如果您可以在IDE中重现这种情况,则在抛出此异常时设置断点(挂起vm中的所有线程),并在发生异常时检查其他线程。
请参阅Eclipse Conditional-Breakpoint. How to check if exception occurs?
发布于 2017-09-14 04:44:49
请参阅此问题:
这里的问题是类似的;堆栈跟踪中的ArrayList正在被并发地操作。上面的问题与删除元素有关,但多个线程的任何并发操作都会导致此问题。ArrayList不是线程安全的。
另一个值得关注的问题是:How do I make my ArrayList Thread-Safe? Another approach to problem in Java?
如果这不是您的ArrayList,那么它可能是您正在调用的任何代码中的错误。
https://stackoverflow.com/questions/46206032
复制相似问题