我将存储JNIEnv
在全局中,以便稍后调用静态 java 方法。但是是否有必要存储指向 的全局指针JNIEnv
,它们与任何其他 java 对象一样,或者它是不需要这个的特殊情况。
JNIEnv* globalEnvPointer;
[JNICALL etc] void init(JNIENv* env, [etc])
{
//required?
globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env);
//or is this OK?
globalEnvPointer = env;
}
编辑
我在这里有点笨,所有将使用的方法globalEnvPointer
,都在我的 init 中调用,因为 myinit
实际上是我c
的程序的main
方法,直到程序结束才会返回。我在 c 程序中也没有使用其他线程。我认为这简化了答案。
JNIEnv* globalEnvPointer;
[JNICALL etc] void main(JNIENv* env, [etc])
{
//required?
globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env);
//or is this OK?
globalEnvPointer = env;
someMethod();
}
void someMethod()
{
//use globalEnvPointer here
}