Suj*_*ane 3 c c++ java java-native-interface
我正在使用一个调用JNI_CreateJavaVM库代码内的函数的库。但是,我还需要一些 JNI 包装,并且需要调用相同的函数JNI_CreateJavaVM来获取JNIEnv*我的应用程序。
但第二次调用失败。
有什么办法可以做到这一点吗?
该库不支持获取或设置JNIEnv*库内创建的内容。
您不能从同一进程创建多个 JVM:
从 JDK/JRE 1.2 开始,不支持在单个进程中创建多个 VM。
您可以通过使用AttachCurrentThread函数将当前线程附加到现有 JVM。请参阅调用 API 的文档。Java 15 中的等效文档简单地指出:
不支持在单个进程中创建多个虚拟机。
您将需要一个指向该JavaVM对象的指针。看看是否JNI_GetCreatedJavaVMs()可以帮助您,我不确定这是每个进程(在这种情况下它只会是单个元素列表)还是每台机器。无论哪种情况,都JavaVM必须是库正在使用的库,否则您可能不会做您想要的事情。如果您可以访问它,那么您应该能够调用 Java 应用程序中的其他对象,但要确保它是线程安全的。