kullanarak bir yerel yöntemden bir Java yöntemini çağıran bir sorun var Birisi bana yardımcı olabilir umuyorum bir JNI sorun var.
Yerel bir iş parçacığından LUSOutputJNI adlı bir Java sınıfının yapıcısını çağırmaya çalışıyorum.
Bu özel sınıfın FindClass (...) dosyasında başarısız oluyor.JNI (C++)
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
Gözlemler:
- Ben bir sonuç elde İşte
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");
başarısız olduğunda gelen logcat çıkışı: Burada kodudur AttachCurrentThread olan 0, whic h bu ekin başarılı olduğunu, +v işaretçisinin artık NULL olmadığını gösterir.
- LUSOutputJNI paket adı bildirimi hakkında eminim (üçlü kontrol ettiniz ...)
- Android/widget/TextView gibi daha popüler bir sınıf adıyla FindClass (..) çalıştırmayı denediğimde, I olumlu bir eşleşme olsun. O orada. İş parçacığı eki ve env değişkenleri anlamlıdır. (Bunu varsayabilir miyim?)
- Bir JNI iş parçacığı çalıştıran bir JNI yönteminden aşağıdaki kodu çalıştırmayı denediğimde, LUSOutputJNI sınıfını sorun olmadan bulur.
Neyi yanlış yapıyorum?
Yardım çok yanlış ne oluyor (o, LOGE değil stderr oturum olacak hakkında biraz daha bilgi almak için Ita
Bu 'LUSOutputJNI' sınıfına atıfta bulunuluyor mu? –
@ K-ballo: Muhtemelen bir kurum içi sınıftır. –
@Ita: LUSOutputJNI statik başlatıcınız bir istisna atar mı? Yükseltilen istisnayı yazdırmalısınız. –