2014-10-08 170 views
1

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

但第二个调用失败。

有人请让我知道有没有办法做到这一点?

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

+0

如果你把一些代码解释你在做什么,我可以看看它 – jgr208 2014-10-08 12:34:42

回答

2

不能创建相同的过程不止一个JVM:

从JDK/JRE 1.2,不支持在单个进程中创建多个虚拟机。

虽然使用AttachCurrentThread函数,但您也许能够将当前线程附加到现有JVM。有关调用API,请参阅文档here

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

+0

谢谢verymuch丹尼斯 – 2014-10-09 01:53:41