【问题标题】:Eclipse/Java: uncaught exceptions on the EDT suspend execution in EventDispatchThread.run()Eclipse/Java:EDT 上未捕获的异常在 EventDispatchThread.run() 中暂停执行
【发布时间】:2011-10-19 17:23:11
【问题描述】:

这是我在使用 Eclipse 进行调试时遇到的一个小烦恼。选中“暂停执行未捕获的异常”后,调试器通常会在引发异常的地方暂停线程。然而,事件调度线程的异常会导致它在 EventDispatchThread.run() 的最后一行暂停。在我恢复线程以允许堆栈跟踪打印到控制台之前,没有关于异常是什么或导致它的原因的有用信息。

在Eclipse中调试以下代码进行演示:

public class SuspendOnUncaughtTest {
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ((Object) null).toString();
            }
        });
    }
}

这是抛出异常后的样子:

EDIT 10/21/2011: 我想 Eclipse 或 Java 调试器没有什么奇怪的,只是在 EventDispatchThread.pumpOneEventForFilters(int) 中捕获并重新抛出异常。我想没有办法告诉 Eclipse“暂停执行将被捕获并可能重新抛出的异常”。太糟糕了。

【问题讨论】:

    标签: java eclipse debugging swing event-dispatch-thread


    【解决方案1】:

    在 NeteBeans 中看到类似的结果,但 Thread.setDefaultUncaughtExceptionHandler() 在这种情况下可能有用。有一个例子here

    【讨论】:

    • 知道 NetBeans 的行为类似是很有用的,也许问题出在 JPDA 而不是 Eclipse。感谢您的建议,但即使使用未捕获的异常处理程序,仍然存在同样令人讨厌的行为。
    【解决方案2】:

    据我所知,没有解决办法。 Eclipse 的行为正确,正确的行为只是烦人。

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,并找到了适合我的方法。

      我正在使用 Kepler,并且能够通过转到调试器透视图的断点选项卡并取消选中 EventDispatchThread 上的复选框来停止此操作。

      【讨论】:

        猜你喜欢
        • 2010-12-03
        • 2018-06-07
        • 2021-07-04
        • 1970-01-01
        • 2015-05-29
        • 2018-07-20
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多