试图初始化vm_args时出错。

问题描述 投票:5回答:2

当我初始化 JDK1_1InitArgs 使用 JDK1_1InitArgs vm_args 编译器给了我错误的提示。JNI_CreateJavaVM.

            JavaVM *jvm;
            JNIEnv *env;
            jmethodID mid;
            JDK1_1InitArgs vm_args; // Line 47
            vm_args.version = 0x00010001; // Line 48
            JNI_GetDefaultJavaVMInitArgs(&vm_args);
            vm_args.classpath = "C:/Program Files/Java/jdk1.7.0/lib;.;";

            JNI_CreateJavaVM(&jvm, &env, &vm_args);
            env = (*jvm)->AttachCurrentThread(jvm,&env,NULL);
            jclass cls = (*env)->GetObjectClass(env,Obj);
            mid = (*env)->GetMethodID(env,cls,"callBack","(Ljava/lang/String;)V");
            (*env)->CallVoidMethodA(env,Obj,mid,(*env)->NewStringUTF(env,"1B"));

参考资料

错误。

enter image description here

为什么我得到这些错误?如何消除这些错误?

java c java-native-interface
2个回答
1
投票

JNI 1.1已经不支持了。请看HotSpot的评论 jvm.h,就在定义之前 struct JDK1_1InitArgs:

这个结构被启动器使用1.1版本的JNI_GetDefaultJavaVMInitArgs()从虚拟机中获取默认线程栈大小。 由于不支持其他方式,它已从jni.h中删除。

来源:http:/hg.openjg.com http:/hg.openjdk.java.netjdk7jdk7hotspotfiletipsrcsharevmprimsjvm.h。,第1673行

在JDK 7中似乎不可能创建一个版本为1.1的JVM--这意味着你可能想使用较晚的版本,如1.2,或者使用较老的JDK。


0
投票

在你的情况下,你可能可以简单地将其替换为

JavaVMInitArgs

但是,请确保也正确初始化版本成员,如

vm_args.version = JNI_VERSION_1_6;
© www.soinside.com 2019 - 2024. All rights reserved.