我有带有 pthread 的本机代码,当我调用 pthread_create 时,我将从 JAVA 代码中获得的 JNIEnv * 作为参数传递给线程函数。JNIEnv * 是有效的,并且在调用 (jclass)i_env->NewGlobalRef(i_env->FindClass("my/package/com/Myclass")); 旁边的所有调用都成功了 返回null。
这是为什么?
10xs,那鸿
我有带有 pthread 的本机代码,当我调用 pthread_create 时,我将从 JAVA 代码中获得的 JNIEnv * 作为参数传递给线程函数。JNIEnv * 是有效的,并且在调用 (jclass)i_env->NewGlobalRef(i_env->FindClass("my/package/com/Myclass")); 旁边的所有调用都成功了 返回null。
这是为什么?
10xs,那鸿
JNIEnv 是特定于线程的。您不能在另一个线程中使用一个 JNIEnv。
要获取当前线程的 JNIEnv,您必须调用 JavaVM 对象的 AttachCurrentThread。在这里阅读:http: //developer.android.com/guide/practices/design/jni.html#JavaVM_and_JNIEnv
并使用 JNI_OnLoad 函数获取 JavaVM 对象:http: //developer.android.com/guide/practices/design/jni.html#native_libraries