0

我有带有 pthread 的本机代码,当我调用 pthread_create 时,我将从 JAVA 代码中获得的 JNIEnv * 作为参数传递给线程函数。JNIEnv * 是有效的,并且在调用 (jclass)i_env->NewGlobalRef(i_env->FindClass("my/package/com/Myclass")); 旁边的所有调用都成功了 返回null。

这是为什么?

10xs,那鸿

4

1 回答 1

1

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

于 2012-04-23T17:28:08.243 回答