我有一个用于从C中调用Java函数的JNI包装器...我正在尝试从不同的线程调用一些方法,并且当尝试获取JNIEnv指针的新副本时出错...我在每个方法中使用的代码如下:
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。