jni :: ExceptionDescribe是否隐式清除JNI环境对象的异常跟踪?

时间:2015-06-22 01:40:10

标签: java c++ exception-handling jvm java-native-interface

我尝试实现某种异常处理

起初我打来电话    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。

2 个答案:

答案 0 :(得分:2)

根据沉亮, Java Native Interface, Addison Wesley 1999,p。 211:

  

此功能具有清除待处理异常的副作用。

答案 1 :(得分:1)

18年前在Windows上报告了显然描述的行为,请检查here。然后解释“看起来像寻址”的错误在2002年关闭了。你所描述的内容与提到的bug非常相似。