0

我有一个使用 swing 的 Java 应用程序。我找到了一种在应用程序中捕获所有未捕获异常的方法(见下文)。我想记录一条消息,为用户显示一个带有消息的对话框并终止应用程序。问题是,我试图捕捉的是一些摆动异常。在 UncaughtExceptionHandler 中捕获异常后尝试显示对话框是不可能的,因为 Swing 线程已停止。有什么办法可以显示一个对话框吗?创建一个新的摆动线程或类似的东西?

谢谢!

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    boolean alreadyCaught = false;

    public void uncaughtException(Thread t, Throwable e) {
        if (alreadyCaught)
            return;

        alreadyCaught = true;
        e.printStackTrace();

        //show Dialog
    }
});
4

1 回答 1

3

完全有可能从默认的未捕获异常处理程序中显示一个对话框。我们的其中一款产品在过去 5 年中一直使用这种机制,没有出现任何问题。

当 EDT 由于异常杀死当前 EDT 而被替换时,我们有一个解决方法。我们不使用常规SwingUtilities#invokeLater来显示对话框,而是使用

new Thread( new Runnable() {
      public void run() {
        EventQueue.invokeLater( aRunnable );
      }
    } ).start();

这允许 EDT 被新的替换,并Runnable在新创建的 EDT 上运行。

于 2012-06-07T09:55:02.500 回答