【问题标题】:Calling JNI_CreateJavaVM function twice两次调用 JNI_CreateJavaVM 函数
【发布时间】:2014-10-08 12:09:41
【问题描述】:

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

但是第二次调用失败了。

有什么办法吗?

该库不支持获取或设置在该库中创建的JNIEnv*

【问题讨论】:

  • 如果你放一些代码来解释你在做什么,我可以看看它

标签: java c++ c java-native-interface


【解决方案1】:

您不能从同一个进程创建多个 JVM:

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

您可以使用AttachCurrentThread 函数将当前线程附加到现有的JVM。见the docs for the Invocation APIequivalent document in Java 15 简单地说:

不支持在单个进程中创建多个 VM。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2017-05-07
    • 2010-12-29
    相关资源
    最近更新 更多