I have a JNI problem which I hope someone can help me out with.
I'm trying to call on a constructor of a Java class called LUSOutputJNI from a native thread.
It keeps failing on FindClass(...) of this specific class.
Here is the code:
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");
Here is the logcat output from when it fails:
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
Observations:
- I get a result from AttachCurrentThread which is 0, which means that this attachment was successful + the env pointer is no longer NULL.
- I'm sure about the package name declaration of LUSOutputJNI (triple checked it...)
- When I try to run FindClass(..) with a more popular class name such as android/widget/TextView , I get a positive match. It is there. Meaning the thread attachment and the env variables are ok. (Can I assume that?)
- When I try to run the following code from a JNI method which has a JNI thread running it, it finds the LUSOutputJNI class without a problem.
What am I doing wrong?
Help will be much appreciated :)
Thanks for your time,
Ita