Beibehaltung eines globalen Verweises auf die JNIEnv-Umgebung

Ich lagere abJNIEnv in einem globalen, damit ich später statische Java-Methoden aufrufen kann. Aber ist es notwendig, einen globalen Zeiger auf das zu speichernJNIEnvSo wie man es mit jedem anderen Java-Objekt machen würde, oder ist es ein Sonderfall, der dies nicht erfordert.

JNIEnv* globalEnvPointer;

[JNICALL etc] void init(JNIENv* env, [etc])
{
   //required?
   globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env);
   //or is this OK?
   globalEnvPointer = env;
}

Bearbeiten

Ich bin ein bisschen dumm hier, alle Methoden, die verwendet werdenglobalEnvPointerwerden in meinem init aufgerufen, weil meininit ist eigentlich meinec Programm istmain Methode, die erst am Ende des Programms zurückgegeben wird. Ich benutze auch keine anderen Threads im c-Programm. Ich denke, das vereinfacht die Antwort.

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
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage