5

我们在 java 7 中有一个类,需要从本机代码加载它。我已经将 java 6 与 JNI 一起使用,但 java 6 无法加载该类。所以我安装了新的 JDK,更改了我的 VC 项目中的包含目录和链接引用等。一切都很好,直到我想从 JNI 启动 jre7:

JNI_CreateJavaVM采用vm_args.version参数中的 java 版本,但没有比 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);

调用FindClassjava7 类显然会产生UnsupportedClassVersionError

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

4

2 回答 2

2

对于 Mac 用户,我强烈推荐阅读这篇文章:

如何在 OS X 10.8.2 上的 Java 7 和 Java 6 之间切换? https://superuser.com/questions/490425/how-do-i-switch-between-java-7-and-java-6-on-os-x-10-8-2

我成功编译并运行了 JNI 示例,在该示例中我从我创建的 Java 类中调用了一些静态方法。我通过像这样调用“java_home”解决了这个问题:

/usr/libexec/java_home -v 1.6.0_45 --exec javac Sample.java

于 2013-06-19T07:18:56.567 回答
1

问题出在路径环境变量上,即 jre7 之前的 jre6。在visual C++->Property Pages->Debugging->Environment上,我改为:path=C:\Java\jre7\bin;C:\Java\jre7\bin\client;%path%

或者直接在:我的电脑->属性->高级->环境变量

于 2012-09-11T19:18:50.743 回答