jni::ExceptionDescribe 是否隐式清除了JNI 环境对象的异常跟踪?
Does jni::ExceptionDescribe implicitily clear the exception trace of the JNI environment object?
我试图实现某种异常处理
起初我打电话
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。
显然描述的行为是 18 年前在 Windows 上报道的,请检查 here。然后解释 "it looks like addressed" bug 在 2002 年被关闭。你所描述的看起来与提到的 bug 非常相似。
根据 Shen Liang 的说法,Java 本机界面, Addison Wesley 1999,p. 211:
This function has the side effect of clearing the pending exception.
我试图实现某种异常处理
起初我打电话
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。
显然描述的行为是 18 年前在 Windows 上报道的,请检查 here。然后解释 "it looks like addressed" bug 在 2002 年被关闭。你所描述的看起来与提到的 bug 非常相似。
根据 Shen Liang 的说法,Java 本机界面, Addison Wesley 1999,p. 211:
This function has the side effect of clearing the pending exception.