2012-04-23 72 views
0

我有本机代码与pthread和当我调用pthread_create我将JNIEnv *,我从JAVA代码作为参数传递给线程函数。 JNIEnv的*是有效的,并使用所有电话都呼叫 (JCLASS)i_env-> NewGlobalRef(i_env->的findClass( “我/包/ COM/MYCLASS”))旁边succefull; 它返回null。从一个新线程创建NewGlobalRef

这是为什么?

10xs, 那鸿

回答

1

JNIEnv的是线程特定的。你不能在另一个线程中使用一个JNIEnv。

要获得JNIEnv的当前线程必须调用JavaVM的对象AttachCurrentThread。阅读这里:http://developer.android.com/guide/practices/design/jni.html#JavaVM_and_JNIEnv

而获得的JavaVM对象使用JNI_OnLoad功能:http://developer.android.com/guide/practices/design/jni.html#native_libraries

+0

我打电话JNI_OnLoad保存在JavaVM *的副本,然后AttachCurrentThread但NewGlobalRef仍返回0 – nmnir 2012-04-24 06:16:47