小编use*_*767的帖子

Java UncaughtExceptionHandler使用JNI没有任何异常

我有一个运行一系列任务的Java库.我使用以下方法注册了默认的未捕获异常处理程序

Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());

UncaughtExceptionHandler实现UncaughtExceptionHandler并仅记录错误信息STDERR.

我的Java库是通过JNI从C++代码调用的,JNI正在调用它,ExceptionCheck()并在C++中将错误记录为FATAL.

问题是:

在运行时,当RuntimeException我的Java代码中发生(或任何其他未捕获的异常)时,错误是在C++中捕获的,而不是我JavaUncaughtExceptionHandler注册为线程默认的未捕获异常处理程序.

  1. 这是例外行为吗?
  2. 什么时候会DefaultUncaughtExceptionHandler真正得到了叫什么?我知道在线程关闭之前,但具体在JNI情况下.是在返回C++之前还是在C++代码完成之后调用的.我认为这与JNI中的线程管理有关,请分享任何相关信息.
  3. 无论如何,我可以捕获我的Java代码中的所有异常(除了放置try/ catch块之外的其他替代方法)

非常感谢.

c++ java java-native-interface multithreading uncaughtexceptionhandler

7
推荐指数
1
解决办法
309
查看次数