मेरे पास जावा कार्यों के लिए जेएनआई रैपर है जिसे सी से कहा जाता है ... मैं विभिन्न धागे से कुछ तरीकों को कॉल करने की कोशिश कर रहा हूं और जेएनआईएनवी पॉइंटर की एक नई प्रति प्राप्त करने का प्रयास करते समय मुझे एक त्रुटि मिलती है ... कोड मैं उपयोग कर रहा हूँ नीचे है और प्रत्येक विधि में कहा जाता है:जेएनआई - बहु धागे
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 पहले से ही instantiated किया गया है और यह (और अन्य तरीकों) जब मुख्य/प्रारंभिक धागे से बुलाया जा रहा है चलाते हैं। जब मुझे envRes के लिए कोई मान मिलता है तो यह एक उप-धागे में एक -2 रखता है।
यह था - मेरे भाग पर बहुत सरल निरीक्षण। बस दो जेएनआई कॉल के आदेश को बदल दिया और यह पूरी तरह से काम करता है! धन्यवाद! – bbqchickenrobot