我使用的库可以在库代码中调用JNI_CreateJavaVM函数。但是,我还需要一些JNI Wrappings,我需要调用相同的函数JNI_CreateJavaVM来获取JNIEnv *到我的应用程序。
但是第二次通话失败了。
有人请告诉我有没有办法做到这一点?
注意:库不支持获取或设置库中创建的JNIEnv *。
答案 0 :(得分:3)
您无法从同一进程创建多个JVM:
从JDK / JRE 1.2开始,不支持在单个进程中创建多个VM。
您可以使用AttachCurrentThread
函数将当前线程附加到现有JVM。有关Invocation API,请参阅文档here。
您需要一个指向JavaVM
对象的指针。看看JNI_GetCreatedJavaVMs()
是否可以帮到你,我不确定这是否是每个进程(在这种情况下它只是一个元素列表)或每台机器。在任何一种情况下,JavaVM
都必须是库正在使用的那个,或者你可能不会做你想要的。如果您可以访问它,那么您应该能够在Java应用程序中的其他对象上进行调用,但要确保它是线程安全的。