我有一个运行一系列任务的Java库.我使用以下方法注册了默认的未捕获异常处理程序
Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());
UncaughtExceptionHandler实现UncaughtExceptionHandler
并仅记录错误信息STDERR
.
我的Java库是通过JNI从C++代码调用的,JNI正在调用它,ExceptionCheck()
并在C++中将错误记录为FATAL.
问题是:
在运行时,当RuntimeException
我的Java代码中发生(或任何其他未捕获的异常)时,错误是在C++中捕获的,而不是我JavaUncaughtExceptionHandler
注册为线程默认的未捕获异常处理程序.
DefaultUncaughtExceptionHandler
真正得到了叫什么?我知道在线程关闭之前,但具体在JNI情况下.是在返回C++之前还是在C++代码完成之后调用的.我认为这与JNI中的线程管理有关,请分享任何相关信息.try
/ catch
块之外的其他替代方法)非常感谢.
c++ java java-native-interface multithreading uncaughtexceptionhandler