我有一个运行一系列任务的 Java 库。我使用以下方法注册了一个默认的未捕获异常处理程序:
Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());
UncaughtExceptionHandler 实现UncaughtExceptionHandler
并且仅将错误信息记录在STDERR
.
我的 Java 库是通过 C++ 代码中的 JNI 调用的,而 JNI 正在调用它ExceptionCheck()
并将错误记录为 C++ 中的 FATAL。
问题是:
在运行时,当RuntimeException
我的 Java 代码中发生(或任何其他未捕获的异常)时,错误会在 C++ 中捕获,而不是我JavaUncaughtExceptionHandler
注册为线程默认的未捕获异常处理程序。
- 那是例外行为吗?
- 什么时候会
DefaultUncaughtExceptionHandler
真正被调用?我知道在线程关闭之前,但特别是在 JNI 情况下。是在返回 C++ 之前调用还是在 C++ 代码完成之后调用)。我认为它与JNI中的线程管理有关,请分享任何相关信息。 - 无论如何我可以在我的Java代码中捕获所有异常(除了放置
try
/catch
块之外的其他替代方式)
非常感谢。