使用JNI调用API创建java7 JVM

时间:2012-09-11 17:18:18

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

我们在java 7中有一个类,需要从本机代码加载它。我已经使用java 6和JNI但java 6无法加载该类。所以我在我的VC项目中安装了新的JDK,更改了包含目录和链接引用等等。直到我想从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);

为java7类调用FindClass显然会产生 UnsupportedClassVersionError

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

问题出在路径环境变量上,它指的是jre7之前的jre6。 在visual C ++ - > Property Pages-> Debugging-> Environment,我改为: 路径= C:\爪哇\ jre7 \ BIN; C:\爪哇\ jre7 \ BIN \客户端;%路径%

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