我用Java写了一个Demo类,然后用C++写了下面的代码,调用Demo类。遇到一个问题:类的路径为什么不能采用绝对路径?难道只能和EXE放在同一目录吗?=============C++代码==============
#include "stdafx.h"
#include <jni.h>
#include <assert.h>
#pragma comment(lib, "jvm.lib")void Test();
int main(int argc, char* argv[])
{ Test();
}void Test()
{
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
jclass cls;
jmethodID mid;
jfieldID fid;
//1、这个路径设置的问题:为什么不能设置绝对路径?
options[0].optionString = "-Djava.class.path = .";  
// options[1].optionString = "-Djava.compiler=NONE";
// options[2].optionString = "-verbose:jni";

vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;

jint nRetStatus = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
assert( JNI_ERR != nRetStatus);

cls = env->FindClass("Demo"); if (cls == 0) {
printf("Fail!\n");
}else{
printf("Access!\n");
}
jvm->DestroyJavaVM();}

解决方案 »

  1.   

    还有就是将下面这两行注释打开
    //options[1].optionString = "-Djava.compiler=NONE";
    //options[2].optionString = "-verbose:jni";
    然后将vm_args.nOptions = 1;改为vm_args.nOptions  = 3; 在debug状态下,程序运行到最后,就会出现错误对话框,为什么呢?
      

  2.   

    自己找到答案了。
    1、绝对路径是可以设置的。在这行代码中,options[0].optionString = "-Djava.class.path = .";  ""之间的字符串,是不能有空格的,我的=左右有一个空格,所以导致这个命令参数出现问题,导致路径出现问题。
    2、第二个问题比较低级:典型的数组越界。当把下面的两行注释打开时,JavaVMOption options[1];应该为JavaVMOption options[3];