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

デフォルトのキャッチされていない例外ハンドラからダイアログを表示することは完全に可能です。当社の製品の 1 つは、このメカニズムを過去 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 に答える