【问题标题】:How to find an exception in swing如何在摇摆中找到异常
【发布时间】:2012-07-23 15:15:34
【问题描述】:

我对 java swing 有疑问。我有时会在随机时间得到这个 NullPointerException(也许在某些绘画方法?): (该项目有超过 100 个类,所以在这里发布代码是没有意义的,而且我对找到这种 excp 的正确方法很感兴趣。这不在我的源代码中)

线程“AWT-EventQueue-0”中的异常 java.lang.NullPointerException 在 javax.swing.plaf.basic.BasicTextUI$RootView.paint(未知来源) 在 javax.swing.plaf.basic.BasicTextUI.paintSafely(未知来源) 在 javax.swing.plaf.basic.BasicTextUI.paint(未知来源) 在 javax.swing.plaf.basic.BasicTextUI.update(未知来源) 在 javax.swing.JComponent.paintComponent(未知来源) 在 javax.swing.JComponent.paint(未知来源) 在 javax.swing.JComponent.paintToOffscreen(未知来源) 在 javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(未知来源) 在 javax.swing.RepaintManager$PaintManager.paint(未知来源) 在 javax.swing.RepaintManager.paint(未知来源) 在 javax.swing.JComponent._paintImmediately(未知来源) 在 javax.swing.JComponent.paintImmediately(未知来源) 在 javax.swing.RepaintManager.paintDirtyRegions(未知来源) 在 javax.swing.RepaintManager.paintDirtyRegions(未知来源) 在 javax.swing.RepaintManager.seqPaintDirtyRegions(未知来源) 在 javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(未知来源) 在 java.awt.event.InvocationEvent.dispatch(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$000(未知来源) 在 java.awt.EventQueue$1.run(未知来源) 在 java.awt.EventQueue$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

现在我的问题是,我应该如何/从哪里开始搜索?我不知道为什么这个 excp。出现。例外。随机出现,这也使得它更难定位。

那么,有人知道从哪里开始(或者可能不是我自己造成的挥杆问题)?

【问题讨论】:

标签: java swing exception event-dispatching repaintmanager


【解决方案1】:

当我在确定哪个组件引发异常时遇到问题时,我会在 eclipse 中放置一个 ExceptionBreakpoint,当出现异常时,我会分析调用堆栈。

这有助于我确定问题,但我在 Java EE 上下文中使用此技术,我不知道是否可以在 Swing 中应用。

【讨论】:

    【解决方案2】:

    如果错误偶尔发生并且与 Swing 相关,我的第一个猜测始终是 Swing 线程问题,例如在另一个线程上修改或访问 Swing 组件,然后是 EDT。这可能会导致 EDT 中出现异常,因为 Swing 不是线程安全的(更多信息请参见 Concurrency in Swing 教程)。

    检查 Swing 线程违规的一个好的开始是安装自定义 RepaintManager,如 this article 中所述

    我概述了more approaches in my answer on a related question

    【讨论】:

    • 我认为这可能会有所帮助...:我会在摇摆中解决并发问题,也许这会有所帮助。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多