का उपयोग कर देशी धागे से जावा विधि पर कॉल करने में समस्या मेरे पास एक जेएनआई समस्या है जो मुझे उम्मीद है कि कोई मेरी मदद कर सकता है।
मैं मूल थ्रेड से LUSOutputJNI नामक जावा क्लास के निर्माता पर कॉल करने का प्रयास कर रहा हूं।
यह इस विशिष्ट श्रेणी के FindClass (...) पर असफल रहता है।जेएनआई (सी ++)
E/lusCore_JNI(3040): 1
E/lusCore_JNI(3040): 2
E/lusCore_JNI(3040): AttachCurrentThread was successful
E/lusCore_JNI(3040): 3
E/lusCore_JNI(3040): Can't find class LUSOutputJNI
E/lusCore_JNI(3040): 4
W/dalvikvm(3040): JNI WARNING: JNI method called with exception raised
टिप्पणियों::
- मैं से एक परिणाम प्राप्त
LOGE("1"); JNIEnv *env = NULL; LOGE("2"); int res = -1; res = g_vm->AttachCurrentThread(&env, NULL); if(env == NULL) { LOGE("env is NULL, AttachCurrentThread failed");; } if(res >= 0) LOGE("AttachCurrentThread was successful"); jclass clazz = NULL; jmethodID cid; jclass clazzESEngine; jmethodID callbackid; jobject jCoreOut; static jfieldID fid_ActionState = NULL; static jfieldID fid_nSpeed = NULL; static jfieldID fid_nType = NULL; static jfieldID fid_nInProcess = NULL; static jfieldID fid_nX = NULL; static jfieldID fid_nY = NULL; LOGE("3"); static const char* const ECOClassName = "lus/android/sdk/LUSOutputJNI"; //static const char* const ECOClassName = "android/widget/TextView"; clazz = env->FindClass(ECOClassName); if (clazz == NULL) { LOGE("Can't find class LUSOutputJNI"); } else LOGE("lus/android/sdk/LUSOutputJNI was found, YEY!!"); LOGE("4"); cid = env->GetMethodID(clazz,"<init>", "()V"); LOGE("5"); jCoreOut = env->NewObject(clazz, cid); LOGE("6");
यहाँ जब यह विफल से logcat उत्पादन होता है:
यहाँ कोड है AttachCurrentThread जो 0 है, whic एच का मतलब है कि यह लगाव सफल रहा + एनवी पॉइंटर अब पूर्ण नहीं है।
- मैं LUSOutputJNI के पैकेज के नाम घोषणा के बारे में यकीन है (ट्रिपल यह जाँच ...)
- जब मैं इस तरह के एंड्रॉयड/विजेट/TextView के रूप में एक और अधिक लोकप्रिय वर्ग के नाम के साथ FindClass (..) चलाने का प्रयास, मैं एक सकारात्मक मैच प्राप्त करें। यह वहाँ है। मतलब थ्रेड अटैचमेंट और एनवी वैरिएबल ठीक है। (क्या मुझे लगता है कि?)
- जब मैं एक जेएनआई विधि से निम्नलिखित कोड चलाने की कोशिश करता हूं जिसमें जेएनआई थ्रेड चल रहा है, तो उसे बिना किसी समस्या के LUSOutputJNI क्लास मिलती है।
मैं क्या गलत कर रहा हूं?
मदद की बहुत सराहना की जाएगी :)
अपने समय के लिए धन्यवाद,
इता
इस 'LUSOutputJNI' वर्ग का कोई संदर्भ? –
@ के-बॉलो: यह शायद एक इन-हाउस क्लास है। –
@Ita: क्या आपका LUSOutputJNI स्थैतिक प्रारंभकर्ता अपवाद फेंक रहा है? आपको उठाए गए अपवाद को मुद्रित करना चाहिए। –