ndk开发总结

来源:互联网 发布:网络银行交易额 编辑:程序博客网 时间:2024/05/14 15:34

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);//调用无参函数的方法,mainmain中可以无参的

 

square = env->CallIntMethod(jobj,mid,env->NewStringUTF(""),env->NewStringUTF("111"));//调用方法

 

 

参考:http://zhidao.baidu.com/question/256113643.html

 

 

 

原创粉丝点击