一連のタスクを実行する Java ライブラリがあります。そして、次を使用して、デフォルトのキャッチされていない例外ハンドラーを登録しました。
Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());
UncaughtExceptionHandler が実装されUncaughtExceptionHandler
、エラー情報のみが に記録されSTDERR
ます。
私のJavaライブラリはC++コードからJNIを介して呼び出され、JNIはそれを呼び出しておりExceptionCheck()
、C++でFATALとしてエラーをログに記録しています。
問題は:
実行時にRuntimeException
、Java コードで (またはその他のキャッチされない例外) が発生すると、JavaUncaughtExceptionHandler
スレッドのデフォルトのキャッチされない例外ハンドラーとして登録されている代わりに、C++ でエラーがキャプチャされます。
- それは例外的な動作ですか?
DefaultUncaughtExceptionHandler
実際に呼び出されるのはいつですか?スレッドがシャットダウンする前に知っていますが、具体的には JNI の場合です。C++ に戻る前に呼び出されるか、C++ コードが終了した後にも呼び出されます)。JNIのスレッド管理に関係していると思いますので、関連情報も教えてください。- とにかく、Javaコードですべての例外をキャッチできますか(
try
/catch
ブロックを置く以外の別の方法)
本当にありがとう。