使用JNI调用API创建一个Java7 JVM

5
我们有一个在Java 7中的类,并需要从本地代码中加载它。我已经使用过带有JNI的Java 6,但是Java 6无法加载该类。因此,我安装了新的JDK,更改了VC项目中的包含目录和链接引用等。一切都很顺利,直到我想要从JNI启动jre7:

JNI_CreateJavaVM将Java版本作为vm_args.version参数传入,但是没有针对1.6以上版本的定义。

JavaVMInitArgs vm_args;
...
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
vm_args.ignoreUnrecognized = 0;

int ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

调用 FindClass 函数来获取 java7 类会导致 UnsupportedClassVersionError 异常。

问题:如何使用 JNI_CreateJavaVM 创建一个 java7 JVM?


2
你确定你的程序实际上正在创建一个Java 7 VM吗(即它加载的动态库引用了Java 7 JRE)? - themel
3
没有像JNI_VERSION_1_6一样的JNI_VERSION_1_7常量,因此他无法创建一个Java 7虚拟机,只能创建一个Java 6虚拟机。这就是问题所在。 - main--
1
由于JNI_VERSION_1_6 = 0x00010006,您可以尝试vm_args.version = 0x00010007,看看会发生什么? - nullpotent
9
这与JNI版本无关 - 没有新的JNI版本,因此无需重新编译程序。您只需要确保在尝试加载Java 7类时实际上使用的是Java 7运行时。同样地,并没有JNI_VERSION_1_5,但您仍然可以使用JNI与Java 5一起使用... - themel
2
RFas,你是怎么解决这个问题的?能否详细说明一下? - Juan Carlos Kuri Pinto
显示剩余3条评论
2个回答

2

1
问题出在路径环境变量上,它指向的是jre7之前的jre6。 在Visual C++->属性页->调试->环境中,我进行了更改: path=C:\Java\jre7\bin;C:\Java\jre7\bin\client;%path%
或者直接在:我的电脑->属性->高级->环境变量中更改。

问题出在用户环境变量中,它设置了运行应用程序时路径到jre6,并覆盖了我的设置。我已经检查了系统环境,但忘记了用户环境。 - RFasioli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接