问题1: 我有一个带有静态方法的java类:
class Test {
static public void show (String value) {
// dosomething with value
}
}
如果我想从c ++调用它:
jstring value = env->NewStringUTF("Hello, World");
// ExceptionCheck after NewStringUTF.
env->CallStaticVoidMethod(the_jclass, the_jmethodID, value);
// ExceptionCheck after CallStaticVoidMethod.
我应该在 NewStringUTF 之前放置 PushLocalFrame ,并在 CallStaticVoidMethod 之后放置 PopLocalFrame 以释放本地参考?
问题2:
我看到了 PopLocalFrame 的声明,它是:
jobject PopLocalFrame(JNIEnv *env, jobject result);
阅读完jni文档后,我仍然无法理解为什么PopLocalFrame需要结果参数和返回值。你能给我一个例子来说明它的存在价值吗?
答案 0 :(得分:3)
我应该在
PushLocalFrame
之前放置NewStringUTF
并在PopLocalFrame
之后放置CallStaticVoidMethod
来发布本地参考资料吗?
在这个特殊情况下,我没有看到这一点。您只需使用DeleteLocalRef
删除本地参考,而不是创建新的本地参考框架。
我仍然无法理解为什么
PopLocalFrame
需要结果参数和返回值
假设您使用PushLocalFrame
创建了一个新的本地参考框架,并且您希望删除在该框架上创建的所有本地参考,但除了您要保留的一个参考(例如你创建了一些你想从函数中返回的对象。)
您可以通过将要保留的引用传递给PopLocalFrame
来实现此目的,并且您获得的值是对前一个本地引用框架(现在是当前引用框架)中该对象的引用。