我们有一个在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?
JNI_VERSION_1_6
一样的JNI_VERSION_1_7
常量,因此他无法创建一个Java 7虚拟机,只能创建一个Java 6虚拟机。这就是问题所在。 - main--JNI_VERSION_1_6 = 0x00010006
,您可以尝试vm_args.version = 0x00010007
,看看会发生什么? - nullpotent