我用如下代码在VC++6中进行对JAVA类的调用封装:
#include "StdAfx.h"
#include <jni.h>JavaVM *jvm;
JNIEnv *env;
void destJVM()
{
(*jvm).DestroyJavaVM();
AfxMessageBox("Java VM destory.");
}int initJVM()
{
int res;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
/*版本号设置不能漏*/
vm_args.version = JNI_VERSION_1_4; JNI_GetDefaultJavaVMInitArgs(&vm_args);  /*设置初始化参数*/
options[0].optionString = "-Djava.compiler=NONE"; 
options[1].optionString = "-Djava.class.path=.; 
options[2].optionString = "-verbose:jni"; //用于跟踪运行时的信息 vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
vm_args.version = JNI_VERSION_1_4; res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (res < 0) {
AfxMessageBox("Can't create Java VM!");
}
else
{
AfxMessageBox("Create Java VM successfully.");
} return res;
}void getMsg()
{
jclass cls = env->FindClass("Demo");
if (cls == 0)
AfxMessageBox("Can't find the class!");
else
AfxMessageBox("Found the class."); jmethodID mid;
cls = env->GetObjectClass(obj);
mid = env->GetMethodID(cls,"getMessage","()Ljava/lang/String;");
//如果mid为0表示获取方法定义失败
jstring msg = (jstring)(env->CallObjectMethod(obj, mid)); AfxMessageBox((LPCTSTR)msg);
}
我依次调用initJVM()、getMsg()、destJVM()
在getMsg()方法中:执行到
jclass cls = env->FindClass("Demo");   //-----------------------到这里
if (cls == 0)
AfxMessageBox("Can't find the class!");
else
AfxMessageBox("Found the class.");
时,总是报“找不到类”,不管我是将此类的存放目录加到系统CLASSPATH、用户CLASSPATH、PATH中,都是依旧找不到Demo.class,逛晕啊,难道还要其它什么配置?哪位兄弟用到过,指点二三啊,急顶着有分,不够再加

解决方案 »

  1.   

    我把此函数小改了一下,还是不可以,唉,为什么有些大侠说调通了呢?
    void getMsg()
    {
    jclass cls = env->FindClass("Demo");
    if (cls == NULL)
    AfxMessageBox("Can't find the class!");
    else
    AfxMessageBox("Found the class.");
    /*
    jmethodID mid;
    cls = env->GetObjectClass(obj);
    mid = env->GetMethodID(cls,"getMessage","()Ljava/lang/String;");
    //如果mid为0表示获取方法定义失败
    jstring msg = (jstring)(env->CallObjectMethod(obj, mid)); AfxMessageBox((LPCTSTR)msg);
    */
    }
      

  2.   

    DX们,你们都到哪去了?我如果将Demo换成java/lang/String,又是OK的,不懂了
    我已经将Demo.class打包成yj.jar放到jre\lib\ext\目录了,为什么还是找不到?CLASSPATH和PATH应该没有问题的大家来帮我看看啊,给你们跪谢了!!!!!!!!!!!!!!!!!!!!!!!!1
      

  3.   

    无package,
    我现在改了一下,不打包成JAR,只把类放到d:\YY目录下,然后将此目录地址放入
    options[1].optionString = "-Djava.class.path=d:\\YY"; 
    这样的话能够找到此类,但是如果打包成JAR后,就找不到了
      

  4.   

    用JNI技术,先把java类生成DLL文件,然后在VC中调用
      

  5.   

    把JAR文件名也包括在classname,试试吧:
    jclass cls = env->FindClass("yj/Demo");