En gardant une référence mondiale pour la JNIEnv environnement

Je suis le stockage hors JNIEnv mondial pour que je puisse appeler statique méthodes de java plus tard. Mais est-il nessasary pour stocker hors d'un pointeur global de la JNIEnv, ils comme on le ferait avec tout autre objet java, ou est-il un cas particulier qui ne nécessite pas de cette.

JNIEnv* globalEnvPointer;

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

Modifier

Je suis bing un peu stupide ici, toutes les méthodes qui leur permettront d'utiliser globalEnvPointer, sont invoqués dans mon init parce que mon init est en fait mon c du programme main méthode, qui ne reviendra pas jusqu'à la fin du programme. Je suis également en utilisant aucun autre thread dans la partie c du programme. Je pense que cela simplifie la réponse.

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
}
InformationsquelleAutor weston | 2012-09-14