2012-04-23 4 views
0

나는 pthread와 함께 원시 코드를 가지고 있고 Im은 pthread_create를 호출 할 때 자바 코드에서 얻은 JNIEnv *를 스레드 함수의 인수로 전달합니다. JNIEnv *는 유효하며 사용중인 모든 호출은 (jclass) i_env-> NewGlobalRef (i_env-> FindClass ("my/package/com/Myclass"))와 같은 호출 옆에 있습니다. null을 반환합니다.새 스레드에서 NewGlobalRef 만들기

왜 그럴까요?

10xs, 나훔

답변

1

JNIEnv의 스레드를 특정한다. 하나의 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

관련 문제