Java UncaughtExceptionHandler 使用 JNI 没有任何异常
Java UncaughtExceptionHandler haven't got any exception using JNI
我有一个运行一系列任务的Java库。我注册了一个默认的未捕获异常处理程序,使用:
Thread.setDefaultUncaughtExceptionHandler(new JavaUncaughtExceptionHandler());
UncaughtExceptionHandler实现UncaughtExceptionHandler
,只记录STDERR
中的错误信息。
我的Java库是通过JNI从c++代码调用的,JNI使用ExceptionCheck()
调用它,并将错误记录为c++中的FATAL。
问题是:
在运行时,当我的Java代码中发生RuntimeException
(或任何其他未捕获的异常)时,错误在c++中被捕获,而不是我的JavaUncaughtExceptionHandler
注册为线程默认未捕获的异常处理程序。
- 这是异常行为吗?
-
DefaultUncaughtExceptionHandler
到底什么时候会被调用?我知道在线程被关闭之前,但是在JNI的情况下。是在返回c++之前调用还是在c++代码完成之后调用?我认为这与JNI中的线程管理有关,请分享任何相关信息。 - 无论如何我都可以捕获Java代码中的所有异常(除了放置
try
/catch
块之外的其他替代方法)
听起来您在谈论Java调用API(即,您从c++程序中调用Java方法,而不是简单的JNI,其中调用的方向相反。)
我不是什么专家,但是我用过Java调用API。
据我所知,只有当Java线程的run()
方法抛出异常时,才会调用未捕获的异常处理程序。但是在C/c++代码创建的线程中没有任何run()
方法。
我写的是C,而不是c++,所以我对Java的调用看起来都像
jobject return_value = (*env)->CallObjectMethod(env, instance, method_id, ...);
当从C调用该方法时,它总是返回,但在使用return_value
之前,必须检查该方法是正常返回还是抛出异常。
如果它抛出了一个异常,没有办法为异常"未捕获",如果C代码不调用(*env)->ExceptionClear(env)
(即,如果C代码不"捕获"异常),那么我不记得发生了什么,但我不认为这是好的。
- 为什么 c++ 使用 throw() 关键字来指示函数不会引发任何异常
- 代码不会处理任何异常
- HTTP异常::无法连接到任何解决的端点-CPPRESTSDK
- std:任何抛出异常解析函数类型
- 是否存在与将数据流式传输到 c++ 异常类相关的任何危险
- 为什么重载运算符上的异常说明符'<<'不适用于任何 std::ostream 对象,但对库中定义的运算符不起作用?
- STL 中是否有任何错误代码异常
- 0x80020009 OLE异常访问除0以外的任何数字
- 运行失败,没有任何异常
- C++例外:不要收到任何异常
- ASSIMP 导出导入的场景而不进行任何更改会引发异常
- 有没有任何方法可以捕获在构造静态/全局时抛出的异常
- 是否有任何运动来指定c++异常和pthread取消的交互?< / h1 >
- 有没有任何方法可以在C++中导致整个堆栈框架展开?(使用异常除外)
- 是否有任何理由通过值捕获异常
- 在for循环内部使用时,是否存在任何异常甚至极端的情况,即后增量实际上比预增量更好
- 程序崩溃并显示消息"terminate called recursively"而不引发任何异常
- boost::crc_32_type是否生成任何异常
- Java UncaughtExceptionHandler 使用 JNI 没有任何异常
- 是否有任何异常是catch(...)可以处理的,而catch(exception&ex)不能处理的?