jni 를 간단하게 사용 하여 자바 방법 을 호출 합 니 다.

2300 단어
jni 에서 자바 방법 을 호출 하여 몇 단계 로 나 눕 니 다.먼저 FindClass 방법 으로 지정 한 클래스 클래스 를 가 져 옵 니 다. GetStaticMethodID 방법 이나 GetMethodID 를 사용 하여 정적 과 비정 적 인 방법 id 를 가 져 옵 니 다.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;
}

좋은 웹페이지 즐겨찾기