C から呼び出される Java 関数の JNI ラッパーがあります...別のスレッドからいくつかのメソッドを呼び出そうとしていますが、JNIEnv ポインターの新しいコピーを取得しようとするとエラーが発生します...コード I' m using は以下で、各メソッドで呼び出されます。
JNIEnv* GetJniEnvHandle(){
ThreadInfo();
JNIEnv *envLoc;
//if(Thread::CurrentThread->IsBackground || Thread::CurrentThread->IsThreadPoolThread)
jint envRes = vm->GetEnv((void**)&envLoc, JNI_VERSION_1_4);
if(envRes == JNI_OK){
if(ThreadId != Thread::CurrentThread->ManagedThreadId)
jint res = vm->AttachCurrentThread((void**)&envLoc, NULL);
}else{
Log("Error obtaining JNIEnv* handle");
}
return envLoc;
}
JVM はすでにインスタンス化されており、メイン/初期スレッドから呼び出されると、この (および他のメソッド) が実行されます。envRes の値を取得すると、サブスレッドでは -2 が保持されます。