Utrzymywanie globalnego odniesienia do środowiska JNIEnv
PrzechowujęJNIEnv
w globalnym, więc mogę później wywołać statyczne metody java. Ale czy nie jest konieczne zapisywanie globalnego wskaźnika doJNIEnv
, sposób, w jaki robiłby to każdy inny obiekt java, czy jest to specjalny przypadek, który tego nie wymaga.
JNIEnv* globalEnvPointer;
[JNICALL etc] void init(JNIENv* env, [etc])
{
//required?
globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env);
//or is this OK?
globalEnvPointer = env;
}
Edytować
Jestem tu trochę głupi, wszystkie metody, które będą używaneglobalEnvPointer
, są wywoływane w moim init, ponieważ mojeinit
jest właściwie mójc
programmain
metoda, która nie wróci do końca programu. Nie używam także innych wątków w programie c. Myślę, że to upraszcza odpowiedź.
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
}