jni对对象的处理其实比较八股,流程基本都是一样的,这次不列举方法了,常用的都在例子里
首先获取jclass,通过FindClass或者getobjectclass
然后获取方法id或者成员变量id
最后执行方法或者拿到成员变量的值
获取Id的时候有一个问题就是获取签名,我的感觉不要自己去记,直接用javap去查,然后拷贝过来就行
class Student{
public static int ID=123;
private String name;
public Student(String name){
this.name=name;
}
public void show(){
System.out.println(name);
}
}
JNIEXPORT void JNICALL Java_JNITest_showStudent(JNIEnv *env, jclass thisObj, jobject stuObj){
//获取jclass
jclass stuClass =env->FindClass("Student");
//获取方法id
jmethodID showID = env->GetMethodID(stuClass,"show","()V");
//执行方法
env->CallVoidMethod(stuObj,showID);
//获取类成员变量id
jfieldID fieldID =env->GetStaticFieldID(stuClass,"ID","I");
//获取变量的值
jint stuID =env->GetStaticIntField(stuClass,fieldID);
cout<<"ID is "<<stuID<<endl;
//新建对象
jmethodID initID = env->GetMethodID(stuClass,"<init>","(Ljava/lang/String;)V");
jstring name = env->NewStringUTF("second");
jobject stuNewObj =env->NewObject(stuClass,initID,name);
env->CallVoidMethod(stuNewObj,showID);
}