我用如下代码在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,逛晕啊,难道还要其它什么配置?哪位兄弟用到过,指点二三啊,急顶着有分,不够再加
#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,逛晕啊,难道还要其它什么配置?哪位兄弟用到过,指点二三啊,急顶着有分,不够再加
解决方案 »
- Thread的interrupt问题
- 求一个java题目
- 如何给JTabbedPane的标签上加上关闭按钮?
- jdbc调用oracle存储过程返回自定义列表的问题
- 请问处理image用哪个包?
- 可行性求教:用标准java(不用applet)能实现,像turbo c 那样界面的程序吗
- 对AtomicInteger的一点疑惑,请大师帮忙解答一下
- 如何搜索本地瓷板中的某个文件?
- 为什么有这么一个问题....
- 小弟刚刚学习JAVA,请大家给我推荐什么值得学习的书,还有谁能和我共同学习~!给我指点迷津呢??
- (满分)大家帮帮我啊!!!!Java 生成.exe文件问题
- 菜鸟问 public void actionPerformed(ActionEvent e)中的e表示什么!?
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);
*/
}
我已经将Demo.class打包成yj.jar放到jre\lib\ext\目录了,为什么还是找不到?CLASSPATH和PATH应该没有问题的大家来帮我看看啊,给你们跪谢了!!!!!!!!!!!!!!!!!!!!!!!!1
我现在改了一下,不打包成JAR,只把类放到d:\YY目录下,然后将此目录地址放入
options[1].optionString = "-Djava.class.path=d:\\YY";
这样的话能够找到此类,但是如果打包成JAR后,就找不到了
jclass cls = env->FindClass("yj/Demo");