我尝试实现某种异常处理
起初我打来电话
jni::ExceptionDescribe()
之后我使用了
的实现How to obtain a description of a Java exception in C++ when using JNI?
我刚刚命名为简单printStackTrace()
,它完全正常
。
我的问题是我不能像这样使用它们。
一些c ++代码
void aCppMethod() {
jni::ExceptionDescribe(); //Works
printStackTrace(); // No stack trace avaiable because JNI Env does not hold any exception
}
但是
void aCppMethod() {
// jni::ExceptionDescribe(); //commented out
printStackTrace(); // Works, where printStackeTrace just prints the Exception into a single log file
}
我的问题是jni::ExceptionDescribe()
是否从Java环境对象中隐含地删除了异常,并且很容易以简单的顺序使用这两个函数。
或者更好。是否有任何钩子或重写机制来增强或改变jni::ExceptionDescribe()
我需要这两种行为的原因是因为我想使用适当的C ++代码作为简单的Windows可执行文件以及DLL。
答案 0 :(得分:2)
根据沉亮, Java Native Interface, Addison Wesley 1999,p。 211:
此功能具有清除待处理异常的副作用。
答案 1 :(得分:1)
18年前在Windows上报告了显然描述的行为,请检查here。然后解释“看起来像寻址”的错误在2002年关闭了。你所描述的内容与提到的bug非常相似。