1.findclass()找不到自定义的类的解决方法:
步骤1:设置-Djava.class.path
//具有用于JVM 的各种选项设置
JavaVMOption options[1];
//设置参考class文件或jar包所在目录,可以修改
options[0].optionString = "-Djava.class.path=.;D:\\javaClass";
...
...
// 指定对象的类定义(jclass)
jclass cls = NULL;
//获得一个实例对象
cls = env->FindClass("Person"); //获取指定对象的类定义(jclass) ,注意:Person是类名称,并且是.class文件中的类名称,而非.java文件中的,如果目录D:\javaClass目录下没有Person.class文件,而只有Person.java文件FindClass是找不到类的,因为其找的是.class文件中的类(即通过javac Person.java编译后的class文件)
备注:javap –s Person //获取函数前面的方式,也是通过.class文件产生的,如果只有.java文件,该命令是不能执行成功的!
if(cls !=0)
{
mid = env->GetMethodID(cls,"<init>","()V"); //调用类的默认构造函数的方法!第二个参数是固定的,表示调用构造函数!---不论类名是什么,都这么写?
if(mid!=0)
{
jobj=env->NewObject(cls,mid);
std::cout << "init ok " << mid << std::endl;
}
//获取函数id,获取静态方法id时要调用含static关键字的函数!--获取函数是通过类实现的,调用函数才用对象jobj
mid = env->GetStaticMethodID( cls, "main"); //读取要调用方法的定义(jmethodID)
//调用函数
env->CallVoidMethod(jobj,mid);//调用无参函数的方法,如main,main中可以无参的
square = env->CallIntMethod(jobj,mid,env->NewStringUTF(""),env->NewStringUTF("111"));//调用方法
参考:http://zhidao.baidu.com/question/256113643.html