2012-04-23 70 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