问题一: 我有一个带有静态方法的 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.
我是否应该将 PushLocalFrame 放在 NewStringUTF 之前并将 PopLocalFrame 放在 CallStaticVoidMethod 之后以释放本地引用?
问题二:
我看到了PopLocalFrame的声明,它是:
jobject PopLocalFrame(JNIEnv *env, jobject result);
看了jni的文档,还是不明白为什么PopLocalFrame需要一个结果参数和一个返回值。能否举个例子说明它的存在值(value)?
最佳答案
Should I put
PushLocalFrame
beforeNewStringUTF
and putPopLocalFrame
afterCallStaticVoidMethod
to release local references?
在这种特殊情况下,我不明白这一点。您可以只使用 DeleteLocalRef
删除您的本地引用,而不是创建新的本地引用框架。
I still can't understand why
PopLocalFrame
needs a result parameter and a return value
假设您使用 PushLocalFrame
创建了一个新的本地引用帧,并且您想要删除在该帧上创建的所有本地引用除了您想要删除的一个引用keep(例如,您创建了一些要从函数返回的对象)。
您可以通过将要保留的引用传递给 PopLocalFrame
来实现此目的,您返回的值是对先前本地引用帧(现在是当前帧)中该对象的引用。
关于java - 当我从 C++ 调用 Java 方法时,我应该调用 PushLocalFrame 和 PopLocalFrame 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36193158/