1

ボタンから例外をスローするアプリが必要です。
その後、例外はアプリケーションをシャットダウンする必要があります (未処理の例外)。

(コードをチェックインするために必要ですRuntime.getRuntime().addShutDownHook()

だから私はこれを書いた

button1.addActionListener(new ActionListener() {
    @Override public void actionPerformed(ActionEvent e) {
        throw new NullPointerException("");
    }
});

また、RuntimeExceptionをスローしてみましたが、アプリケーションは閉じませんでした。

例外のためにアプリを閉じる方法はありますか?
ありがとう。

編集
説明します-Javaドキュメント で-http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook( java.lang.Thread)
JVM シャットダウン フックを作成し、実行速度の速いコードにします。見積もり:

「シャットダウンフックもすばやく作業を終了する必要があります....」

私のコードはもう少し長く実行されており、例外によってテストしたかった (System.exit() ではなく - 同じはずですが、結果が同じでない場合もあります)

ボタンからどのように例外をスローするのか疑問に思いました(コードが悪いことはわかっています。テスト用です)。

4

3 に答える 3

1

この回答を確認してください: Swingでこの例外をキャッチするにはどうすればよいですか?

uncaughtException の実装では、アプリを終了するだけです。

于 2012-08-21T14:06:23.593 に答える
1

例外をキャッチして System.exit() を呼び出す必要があります

ここのコメントで説明されています(Duncan Jonesが提案しました;)

setDefaultUncaughtExceptionHandler は、スレッドが終了した場合にのみ機能します (キャッチされなかった例外が原因でスレッドが突然終了した場合)。ただし、アプリケーションが終了しない限り、EventQueue スレッドは終了しません。したがって、特別な処理を行わないと、キャッチされなかったすべての例外が EventQueue によって飲み込まれ、黙ってシステム アウトに入ります。

したがって、キャッチされていない例外ハンドラーを追加して、他のスレッドが終了したときにトラップしますが、EDT でスローされた例外をチェックするには、自分でキャッチする必要があります。

于 2012-08-21T14:12:22.443 に答える
0

例外のためにアプリを閉じるにはどうすればよいですか?

まず、アクション リスナーから例外をスローしても機能しません。Swing イベント ディスパッチャー スレッドは強制終了されますが、アプリケーションは終了しません。

簡単な解決策は、リスナーから呼び出しSystem.exit(...)て JVM にシャットダウンを指示することです。ただし、そのアプローチが少し「残忍」であり、非同期で実行されているタスクが放棄される可能性がある場合。シャットダウンフックを使用してタスクを回避することで改善できますが、それでも良いとは言えません。たとえば、シャットダウン フックは予測可能な順序で起動しません ...

より良い解決策は、を呼び出してプラグを抜く前に、正常なシャットダウンを実行するようにアプリケーションを設計System.exit()することです。たとえば、「メイン」スレッドが Swing ディスパッチャ イベント スレッドを起動すると、シャットダウンするように指示する条件で待機することができます。「終了」ボタンのアクション リスナーがこの状態を通知し、メイン スレッドが起動してシャットダウンを開始します。

于 2012-08-21T14:16:06.327 に答える