2013-04-29 134 views
1

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

我正在与-Xcheck:jni的代码,我得到吨...

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

......这是正在引起调用ExceptionCheck()(通过步进虽然确定代码)。

从这里,我是否正确假设GetStringCritical()不会导致异常?

回答

2

docs以实际包含有关GetStringCritical功能真实信息的多个主题,你会发现:

内的临界区域,本地代码不能调用其他JNI 功能

返回一个指向Unicode字符串的指针,或者如果操作fa返回NULL ILS。

因此,不,它不会引起异常,警告与文档一致:请勿拨打other JNI functions

调用GetStringCritical可让您短时间访问字符串中的字符,以便您可以使用或复制它们的功能C函数。

0

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

例如:

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

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

当你不就把他们释放的一个,它给出了警告。只需把释放到Func2并摆脱这个问题。