JNI和pthread

时间:2012-04-24 06:02:47

标签: android-ndk

我正在调用JNI_OnLoad来保存JavaVM * localy:

             JavaVM * and_jvm = NULL;
             jint JNI_OnLoad(JavaVM* vm, void* reserved)
             {
                   and_jvm = vm;
                   return JNI_VERSION_1_6;
             }

当我开始我的主题时,我打电话给

             void * thread_f (void * v)
             {
             jint attachResult = and_jvm->AttachCurrentThread(&env,NULL);
             //The attachResult is 0.
             jclass my_class= (jclass)env->NewGlobalRef(env->FindClass("my/package/com/MyClass"));
             //my_class is 0
             if (my_class == 0)
                  return NULL;
             }

如果我从线程中调用NewGlobalRef,则返回一个有效对象。 有什么问题?

10xs, 内厄姆

1 个答案:

答案 0 :(得分:1)

问题不在于NewGlobalRef,而在于FindClass

最好在FindClass中完成所有JNI_OnLoad次来电。这是因为类加载器存在一些问题...当你在新线程上时,会使用不同的类加载器,这就是找不到类的原因。

您实际上可以将my_class设为全局,在GlobalRef中创建JNI_OnLoad并在程序中的任何位置使用它而不会出现问题。