GetStringCritical()可以抛出异常吗?

时间:2013-04-29 19:50:36

标签: java java-native-interface

在我们的一些JNI代码中,我们调用GetStringCritical()来获取字符串的内容。之后,我们调用ExceptionCheck()来处理发生的任何异常。

我正在使用-Xcheck:jni运行代码,而且我得到了很多......

Warning: Calling other JNI functions in the scope of Get/ReleasePrimitiveArrayCritical or Get/ReleaseStringCritical

...这是由ExceptionCheck()的调用引起的(通过代码踩踏确定)。

从这一点来看,假设GetStringCritical()不能导致异常,我是否正确?

2 个答案:

答案 0 :(得分:2)

关注docs个实际包含GetStringCritical函数实际信息的多个主题后,您会发现:

  

在关键区域内,本机代码不得调用其他JNI   功能

  

返回指向Unicode字符串的指针,如果操作失败,则返回NULL。

所以,不,它不会导致异常并且警告与文档一致:不要调用other JNI functions

通过拨打GetStringCritical,您可以短信访问字符串中的字符,以便您可以使用C函数来复制它们。

答案 1 :(得分:0)

我有同样的问题。主要原因是在使用getstringprimitive / getprimitivearray之后,必须调用releaseprimitive。如果没有,当你有多个具有相同java对象的调用时,它会告诉你已经为一个对象打开了一个会话,并尝试在另一个函数调用中使用它。

例如:

Func1(..){
env->GetStringCritical(..)
env->ReleaseStringCritical(..)
}

Func2(..){
env->GetStringCritical(..)
}

当你不释放其中一个时,就会发出警告。只需将释放发布到Func2并解决该问题。