问题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 ,在之后放置 PopLocalFrame 来释放本地引用吗?

问题2:

我看到了 PopLocalFrame 的声明,它是:
jobject PopLocalFrame(JNIEnv *env, jobject result);

在阅读了jni文档之后,我仍然不明白为什么PopLocalFrame需要结果参数和返回值
。您能举一个例子说明它的存在值(value)吗?

最佳答案



在这种情况下,我看不到重点。您可以只使用DeleteLocalRef删除本地引用,而不必创建新的本地引用框架。



假设您使用PushLocalFrame创建了一个新的本地引用框架,并且想要删除在该框架上创建的所有本地引用,除了您要保留的一个引用(例如,您创建了一些要从函数返回的对象)。
您可以通过将要保留的引用传递给PopLocalFrame来达到此目的,并且返回的值是先前本地引用框架(现在是当前引用框架)中对该对象的引用。

10-04 12:54