1つのアプリケーションレベルを定義したいUncaughtExceptionHandler Javaアプリケーションで、キャッチされない例外がアプリケーションの1つのスレッドでスローされた場合に呼び出されます。 スレッドグループ(ThreadGroup)に対してキャッチされていない例外を定義することは可能で、実際には使用していますが、独自のキャッチされていない例外ハンドラを定義していないスレッドと定義されているデフォルト例外ハンドラを持つスレッドのグループには関連付けられていません。私はデフォルトたuncaughtExceptionHandlerをオーバーライドし、それがデフォルトです(System.err
に代わり、プリントのスタックトレースを私自身のハンドラを定義する簡単な言葉ではアプリケーションのすべてのスレッドに対して1つのグローバルUncaughtExceptionHandlerを定義します。
1° LEVEL ---> Call thread own UncaughtExceptionHandler ---> 2° LEVEL Call Thread Group UncaughtExceptionHandler ---> 3° LEVEL Call application(default) UncaughtExceptionHandler
:
だから例えば私はこのような何かに到達したいです動作)。例えば
C#.NETで、私は、アプリケーションのmain()メソッドで未処理とスレッド例外イベントハンドラを扱う似たような操作を行います。
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
でもJavaで行うことができますか?
JavaでデフォルトのUncaughtExceptionHandlerをオーバーライドするにはどうすればよいですか?
これはアプリケーションのすべてのスレッドに対して有効ですか、またはこれが定義されている現在のスレッドに対してのみ有効ですか?アプリケーションのメインメソッドで定義する必要がありますか? – aleroot
スレッドクラスの静的フィールドとして設定され、スレッドローカルフィールドとしては設定されません。したがって、アプリケーション内のすべてのスレッドで有効です。これはmainメソッドで定義することができますが、mainクラスの 'static'ブロック内に定義したいと思うかもしれません。 –
@JohnVint上記のコメントで答えを更新してください。私にとっては、あなたがThreadクラスの静的フィールドであると言ったときは理解しやすい – Gerrard