Llamando otros metodos de Java 

Para llamar a un metodo de instancia de la clase, siga los 3 siguientes pasos.

  1. Llame a la funcion GetObjectClass(), que devuelve un objeto clase que corresponde al tipo del objeto de Java.

  2. Llame a GetMethodID() para obtener en una variable ID un indicador del metodo requerido

  3. Por ultimo, use el indicador de metodo para llamar al metodo con la funcion CallVoidMethod() (o la que corresponda segun el tipo a devolver)

JNIEXPORT void JNICALL

Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth)

{

    jclass cls = (*env)->GetObjectClass(env, obj);

    jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");

    if (mid == 0) {

        return;

    }

    printf("In C, depth = %d, about to enter Java\n", depth);

    (*env)->CallVoidMethod(env, obj, mid, depth);

    printf("In C, depth = %d, back from Java\n", depth);

}

 

Ejemplos:

Callbacks.java

Callbacks.c

 

Java VM Type Signatures

 

 

ClassName: es la especificación completa del nombre de una clase (ej: java.lang.String --> /java/lang/String)