JNI:生成需要与Java交互的线程的本机方法

JNI:生成需要与Java交互的线程的本机方法,java,java-native-interface,jnienv,Java,Java Native Interface,Jnienv,我有一个从Java进程调用的C方法: extern "C" { JNIEXPORT jstring JNICALL Java_bla_bla_bla(JNIEnv *env, jclass java_class, jint param) { /* Spawn C threads that are going to call Java methods */ } } 问题是,我的本机方法从Java获得的只是一个JNIEnv实例。为了调用AttachCurrentT

我有一个从Java进程调用的C方法:

extern "C" {
    JNIEXPORT jstring JNICALL Java_bla_bla_bla(JNIEnv *env, jclass java_class, jint param) {
         /* Spawn C threads that are going to call Java methods */
    }
}
问题是,我的本机方法从Java获得的只是一个
JNIEnv
实例。为了调用
AttachCurrentThread()
,我需要一个
JavaVM
对象


如何从本机方法获取
JavaVM
指针?

另一种方法是缓存在
JNI\u OnLoad
中接收的
JavaVM*

另一种方法是调用
GetJavaVM
函数,该函数是
JNIEnv
的一部分:

JNIEXPORT jstring JNICALL Java_bla_bla_bla(JNIEnv *env, jclass java_class, jint param) {
    JavaVM *jvm;
    if (env->GetJavaVM(&jvm)) {
        // Something went wrong
    }
    // Pass jvm to the new thread