尝试初始化vm_args时出错

时间:2012-06-06 12:18:35

标签: java c java-native-interface

当我使用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"));

Reference

错误:

enter image description here

为什么我会收到这些错误?我怎么能摆脱他们?

2 个答案:

答案 0 :(得分:1)

不再支持JNI 1.1。在jvm.h的定义之前看到来自HotSpot的struct JDK1_1InitArgs的评论:

  

启动程序使用此结构来获取默认线程   使用带有JNI_GetDefaultJavaVMInitArgs()的VM的堆栈大小   版本1.1。由于不支持,它已被删除   来自jni.h

来源:http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/tip/src/share/vm/prims/jvm.h,第1673行

似乎无法在JDK 7中创建JVM版本1.1 - 这意味着您可能希望使用更高版本(如1.2)或使用旧版JDK。

答案 1 :(得分:0)

根据您的情况,您可以简单地将其替换为struct

JavaVMInitArgs

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

vm_args.version = JNI_VERSION_1_6;