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 speichernJNIEnv
So 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 werdenglobalEnvPointer
werden 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
}