Of the top of my head, I think you need to createThreadEtc with the flag to indicate that your thread will call into Java.
On Jan 9, 2:00 pm, "redlight9...@gmail.com" <redlight9...@gmail.com> wrote: > i am trying to make callbacks to my android application from a native > C thread using JNI. however when i call FindClass it returns a NULL > value. i need to get the jclass value returned by FindClass() to > call GetStaticMethoID to make calls back up to my android application. > > i store the JavaVM* globally that i receive from JNI_OnLoad which gets > called from the android thread when my application loads my shared > library. I then use that JavaVM* to attach the java virtual machine > to my native C thread by calling AttachCurrentThread() which returns a > 0 value indicating success. > > the weird thing is that when i make calls to FindClass() in the > android thread it works fine and returns a valid value. however when > i call FindClass() from the native C thread it returns NULL. I was > thinking that it might have something to do with the native C thread > not have the proper classpath set up? any help would be greatly > appreciated. > > my code is down below, i omitted error checking and some of the code > to save space. > > #include "JNIHelp.h" > #include "jni.h" > #include "utils/Log.h" > > static JavaVM *jvm; > > static void androidCback(int event) > { > jint r; > jclass cls; > JNIEnv *env; > jmethodID mid; > > r = (*jvm)->AttachCurrentThread(jvm, &env, NULL); > > /* !!! FindClass returns NULL !!! */ > cls = (*env)->FindClass(env, "com.android.SomeApp.Class"); > > mid = (*env)->GetStaticMethodID(env, cls, "handleEvent", "(I)V"); > (*jvm)->DetachCurrentThread(jvm); > > } > > JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) > > { > > JNIEnv *env; > > JNINativeMethod meth; > > jclass k; > > jint r; > > r = (*vm)->GetEnv (vm, (void **) &env, JNI_VERSION_1_4); > > /* !!! FindClass returns valid value !!! */ > k = (*env)->FindClass (env, "com.android.SomeApp.Class"); > > /* save the java virtual machine globally */ > jvm = vm; > > meth.name = "enableNative"; > > meth.signature = "(I)Z"; > > meth.fnPtr = enableNative; > > r = (*env)->RegisterNatives (env, k, &meth, 1); > > } > > JNIEXPORT void JNI_OnUnload(JavaVM *vm, void *reserved) > > { > > JNIEnv *env; > > jclass k; > > jint r; > > r = (*vm)->GetEnv (vm, (void **) &env, JNI_VERSION_1_4); > > /* !!! FindClass returns valid value !!! */ > k = (*env)->FindClass (env, "com.android.SomeApp.Class"); > > (*env)->UnregisterNatives(env, k); > > } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---