Я сохраняю JNIEnv
в глобальном, поэтому я могу позже вызвать статические java-методы. Но нужно ли хранить глобальный указатель на JNIEnv
, как и любой другой Java-объект, или это особый случай, который не требует этого.
JNIEnv* globalEnvPointer;
[JNICALL etc] void init(JNIENv* env, [etc])
{
//required?
globalEnvPointer = (JNIENv*) (env*)->GetGlobalRef(env, env);
//or is this OK?
globalEnvPointer = env;
}
Edit
Я немного тупой здесь, все методы, которые будут использовать globalEnvPointer
, вызываются в моем init, потому что мой init
на самом деле мой метод c
program main
, который не будет возвращаться до тех пор, пока конец программы. Я также не использую никаких других потоков в программе c. Я думаю, что это упрощает ответ.
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
}