两次调用JNI_CreateJavaVM函数

时间:2014-10-08 12:09:41

标签: java c++ c

我使用的库可以在库代码中调用JNI_CreateJavaVM函数。但是,我还需要一些JNI Wrappings,我需要调用相同的函数JNI_CreateJavaVM来获取JNIEnv *到我的应用程序。

但是第二次通话失败了。

有人请告诉我有没有办法做到这一点?

注意:库不支持获取或设置库中创建的JNIEnv *。

1 个答案:

答案 0 :(得分:3)

您无法从同一进程创建多个JVM:

  

从JDK / JRE 1.2开始,不支持在单个进程中创建多个VM。

您可以使用AttachCurrentThread函数将当前线程附加到现有JVM。有关Invocation API,请参阅文档here

您需要一个指向JavaVM对象的指针。看看JNI_GetCreatedJavaVMs()是否可以帮到你,我不确定这是否是每个进程(在这种情况下它只是一个元素列表)或每台机器。在任何一种情况下,JavaVM都必须是库正在使用的那个,或者你可能不会做你想要的。如果您可以访问它,那么您应该能够在Java应用程序中的其他对象上进行调用,但要确保它是线程安全的。