JNI回调java方法

2017-12-04  本文已影响0人  跟跟_a5e9

要回调java 类结构

public class TrackBox {
    public String boxId;   
    public int x;       //中心点的x坐标         
    public int y;       //中心点的y坐标            
    public String localPath; //本地路径    
    /*public TrackBox() {     }*/    

  public TrackBox(String boxId, int x, int y, String localPath) {    
      this.boxId = boxId;                 
      this.x = x;                 
      this.y = y;                       
      this.localPath = localPath;        
  }      

  public void setBoxId(String boxId) {        
    this.boxId = boxId;        
  }
}

第一步:获得java类的class

clazz = env->FindClass("com/example/track/TrackBox");

第二步:获得class的实例对象

//先获得构造方法的MethodID
jmethodID boxMethod = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;IILjava/lang/String;)V");
jstring boxID = env->NewStringUTF("1");
jint x = 20;
jint y = 30;
jstring local = env->NewStringUTF("abc");
jobject obj = env->NewObject(clazz, boxMethod, boxID, x, y, local);

第三步:调用TrackBox 的setBoxId方法

//先获得setBoxId 的MethodID
jmethodID boxMethodID = env->GetMethodID(clazz, "setBoxId", (Ljava/lang/String;)V);
jstring boxID = env->NewStringUTF("1");
//调用
env->CallObjectMethod(obj, boxMethodID, boxID);

------------------------分割线-----------------------------------
有些情况是直接从java方法传递过来对象,例如接口回调
那就省去第一步和第二步

上一篇下一篇

猜你喜欢

热点阅读