Java jni可以';如果jvm的参数是从其他类型转换而来的,则找不到该类
我对jni和c++/qt有一个小问题: 这是我的代码:Java jni可以';如果jvm的参数是从其他类型转换而来的,则找不到该类,java,c++,qt,jvm,java-native-interface,Java,C++,Qt,Jvm,Java Native Interface,我对jni和c++/qt有一个小问题: 这是我的代码: void Jvm::create_jvm(QStringList &arguments){ QTextStream cout(stdout); JavaVM *jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption *options[4]; //run begin //options[0].optionString = "-
void Jvm::create_jvm(QStringList &arguments){
QTextStream cout(stdout);
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption *options[4];
//run begin
//options[0].optionString = "-Djava.compiler=NONE";
//options[1].optionString = "-Djava.class.path=app";
//options[2].optionString = "-verbose:jni";
//options[3].optionString = "-Xmx512m";
//run end
//can't find the class begin
QByteArray bArray;
cout<<"Valores del array arguments"<<endl;
for(int i;i<arguments.size();i++){
cout<<arguments.at(i)<<endl;
bArray=arguments.at(i).toStdString().c_str();
options[i].optionString = bArray.data();
cout<<options[i].optionString<<endl;
}
//can't find the class end
//jvm args
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 4;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_FALSE;
jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (res < 0) {//jvm don't created
qDebug()<<"Can't create Java VM\n";
exit(1);
}else{//jvm created
invoke_class(env);
jvm->DestroyJavaVM();
}
}
void Jvm::invoke_class(JNIEnv* env) {
jclass cls;
jmethodID mainMethod;
jobjectArray applicationArgs;
jstring applicationArg0,applicationArg1,applicationArg2;
//class and main method
cls = env->FindClass("HolaMundoSwing");
if (cls == 0) qDebug()<<"Sorry, I can't find the class"; //In case that class not exist
mainMethod = env->GetStaticMethodID(cls, "main", "([Ljava/lang/String;)V");
//Application arguments array
applicationArgs = env->NewObjectArray(3, env->FindClass("java/lang/String"), NULL);
applicationArg0 = env->NewStringUTF("From");
applicationArg1 = env->NewStringUTF("C");
applicationArg2 = env->NewStringUTF("program");
env->SetObjectArrayElement(applicationArgs, 0, applicationArg0);
env->SetObjectArrayElement(applicationArgs, 1, applicationArg1);
env->SetObjectArrayElement(applicationArgs, 2, applicationArg2);
env->CallStaticVoidMethod(cls, mainMethod, applicationArgs); //Call to the method
}
void Jvm::create_Jvm(QStringList&arguments){
QTextStream cout(stdout);
JavaVM*jvm;
JNIEnv*env;
JavaVMInitArgs vm_args;
JavaVMOption*选项[4];
//跑步开始
//选项[0]。选项字符串=“-Djava.compiler=NONE”;
//选项[1]。选项字符串=“-Djava.class.path=app”;
//选项[2]。选项字符串=“-verbose:jni”;
//选项[3]。选项字符串=“-Xmx512m”;
//终点
//找不到开始上课的时间
QByteArray bArray;
cout您的for循环包含错误:
for( int i; i < arguments.size(); i++ )
for(int i;i
应该是
for( int i = 0; i < arguments.size(); i++ )
for(int i=0;i
否则,i
将有任何随机开始值(至少在我的编译器中)你的问题是什么?我不清楚你在哪里有问题。什么是“我已经测试了参数并且是相同的”意思?什么是“类路径具有相同的值”意思?与什么相同?什么是“注释代码”和“其他代码”这个问题到底是关于什么的?