当我使用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"));
错误:
为什么我会收到这些错误?我怎么能摆脱他们?
答案 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;