抛出Swing异常时显示对话框

时间:2012-06-07 09:47:02

标签: java multithreading swing exception jdialog

我有一个使用swing的Java应用程序。我找到了一种方法来捕获应用程序中所有未捕获的异常(见下文)。我想记录一条消息,显示一个包含用户消息的对话框并终止该应用程序。问题是,我想要抓住的是一些摆动异常。由于Swing线程已停止,因此在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
    }
});

1 个答案:

答案 0 :(得分:3)

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

由于异常杀死当前的EDT,我们在替换EDT时遇到了问题的解决方法。我们使用

而不是使用常规SwingUtilities#invokeLater来显示对话框
new Thread( new Runnable() {
      public void run() {
        EventQueue.invokeLater( aRunnable );
      }
    } ).start();

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