当我初始化 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"));
错误。
为什么我得到这些错误?如何消除这些错误?
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。
在你的情况下,你可能可以简单地将其替换为
JavaVMInitArgs
但是,请确保也正确初始化版本成员,如
vm_args.version = JNI_VERSION_1_6;