我用如下代码在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.   

    我刚刚做了一个三层嵌套的JNI方面的C++,java对象互转,但要全部说,是在太麻烦了
      

  2.   

    meicaikourou() 我只需要您帮我看看为什么我的类在JVM虚拟机中找不到啊?我创建销毁JAVA虚拟机都可以,就是中间FindClass找不到指定类
      

  3.   

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

  4.   

    要加包名,其中的“.”要换成"/",如下
    jclass jSymbolStruct = env->FindClass("com/hy/trade/symbols/utils/SymbolStruct");
    JNI是很繁琐的,有时候真觉得无聊的繁琐,尤其是涉及到对象数组,还存在对象嵌套时,慢慢摸索吧