1:可以做的是改为缓存JavaVM指针。
static JavaVM *jvm;
[JNICALL etc] void init(JNIENv* env, [etc])
{
jint rs = (*env)->GetJavaVM(env, &jvm);
[assert](http://www.opengroup.org/onlinepubs/009695399/functions/assert.html) (rs == JNI_OK);
}
2:在没有给它的上下文中使用JNIEnv指针,请执行以下操作:
void someCallback() {
JNIEnv *env;
jint rs = (*jvm)->AttachCurrentThread(jvm, &env, NULL);
[assert](http://www.opengroup.org/onlinepubs/009695399/functions/assert.html) (rs == JNI_OK);
//找到接口类
jclass jSdkClass = env->GetObjectClass(myTest);
//找到接口类方法,第三个参数是方法签名
jmethodID javaCallback = env->GetMethodID(jSdkClass, "getX", "(Z)V");
//进行回调
env->CallVoidMethod(myTest, javaCallback, true);
}
网友评论