Mantendo uma referência global ao ambiente JNIEnv
Estou armazenandoJNIEnv
em um global para que eu possa chamar métodos java estáticos mais tarde. Mas é elevadoary armazenar um ponteiro global para oJNIEnv
, como alguém faria com qualquer outro objeto java, ou é um caso especial que não requer isso.
JNIEnv* globalEnvPointer;
[JNICALL etc] void init(JNIENv* env, [etc])
{
//required?
globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env);
//or is this OK?
globalEnvPointer = env;
}
Editar
Eu sou bing um pouco idiota aqui, todos os métodos que vão usarglobalEnvPointer
, são invocados dentro do meu init porque o meuinit
é na verdade minhac
programa demain
método, que não retornará até o final do programa. Eu também não estou usando outros threads no programa c. Eu acho que isso simplifica a resposta.
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
}