搜题
问题   更新时间2024/8/16 9:22:00

使用JNI调用Java类中方法getTest()。(简答题)

.1、先使用FindClass方法获取指定类class;2、在使用GetStaticMethodID方法或者GetMethodID获取静态和非静态的方法id。3、在使用CallObjectMethod或者CallStaticObjectMethod方法调用静态非静态方法,对于没有返回值的方法,函数为CallStaticVoidMethod形式。jobject zoomImage(JNIEnv* env, jobject jimgo, jint width, jint height, jint hints)  {      /* 声明局部变量 */      jobject zoomimage;      jmethodID jmgsi;      jclass jimagec;        /* 查找指定名称类 */      jimagec = (*env)->FindClass(env, "java/awt/Image");      /*         获取方法id         (III)Ljava/awt/Image;为方法参数和返回值类型         (III)表示此方法参数为int,int,int三个参数。返回值为Ljava/awt/Image     */      jmgsi = (*env)->GetMethodID(env, jimagec, "getScaledInstance", "(III)Ljava/awt/Image;");      zoomimage = (*env)->CallObjectMethod(env, jimgo, jmgsi, width, height, hints);      return zoomimage;  }    jobject getImage(JNIEnv* env, jbyteArray buf)  {      /* 声明局部变量 */      jclass jcls;      jmethodID jmid;      jmethodID jcreateimage;      jobject jtk;      jobject jimgo;      /*         FindClass函数用于查找java类,参数为类的包名形式,不过.换成了/。         java.awt.Toolkit 对应java/awt/Toolkit     */      jcls = (*env)->FindClass(env, "java/awt/Toolkit");      if (jcls == NULL) {          return NULL;      }      /*         查找静态方法id。         第二个参数为查找方法的类class,         第三个参数为查找方法名称,         第三个参数为方法参数和返回值类型。         java中方法 public static Toolkit getDefaultToolkit()         对应的参数和方法类型为()Ljava/awt/Toolkit;         ()表示此方法没有参数,Ljava/awt/Toolkit为返回值类型,记住前面的L和结尾;     */      jmid = (*env)->GetStaticMethodID(env, jcls, "getDefaultToolkit", "()Ljava/awt/Toolkit;");      /*         调用静态方法,返回类型为Object。         参数分别为:指定方法的class和获取的方法id     */      jtk = (*env)->CallStaticObjectMethod(env, jcls, jmid);      /*         获取非静态方法id         使用和静态一样,注意这里参数类型:([B)Ljava/awt/Image;         ([B)表示此方法的参数类型为byte[]数组,具体参数对应类型可以查找sun的jni手册     */      jcreateimage = (*env)->GetMethodID(env, jcls, "createImage", "([B)Ljava/awt/Image;");        /*         调用非静态方法,并返回Obiect对象,最后一个参数为可变参数,对应值为         方法的参数列表。      */      jimgo = (*env)->CallObjectMethod(env, jtk, jcreateimage, buf);        /* 释放局部对象*/      (*env)->DeleteLocalRef(env, jtk);      return jimgo;  }   
王老师:19139051760(拨打)