开发者

AndroidRuntime::getJNIEnv() returns NULL

I have the below code snippet in my the JNI part:

JNIEnv* env = AndroidRuntime::getJNIEnv();

The above statement always returns NULL in my function. Then I use env and call some method in Java code usi开发者_StackOverflow中文版ng callback mechanism.

It's this part of the code in getJNIEnv() that always returns NULL.

if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
{
        return NULL;
}

Can anyone please tell me what's wrong with code? It looks pretty normal to me since other functions in JNI too have almost similar implementation.


First, don't use AndroidRuntime::getJNIEnv(). That's not part of the NDK API. You should be using the JNI GetEnv function instead.

Second, GetEnv returns NULL if the current thread is not attached to the VM. (Remember, JNIEnv is thread-specific.) If you created the thread yourself, you will need to use the JNI AttachCurrentThread function to attach it.

Both of these require a JavaVM pointer. There's only one of these per process, so you can get it during JNI_OnLoad or a setup call from your program (GetJavaVM function) when you have a JNIEnv passed in.

If you haven't yet, read through the JNI Tips page (which includes references to some comprehensive JNI docs).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜