.c file
#include <jni.h>
#include <stdio.h>
#include "InstanceMethodCall.h"
JNIEXPORT void JNICALL Java_InstanceMethodCall_nativeMethod
(JNIEnv *env, jobject obj){
jclass cls = (*env)->GetObjectClass(env,obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "callback","()V");
if (mid == NULL){
return;
}
printf("In C\n");
//From C call java.
(*env)->CallVoidMethod(env, obj, mid);
}
.java file
class InstanceMethodCall{
private native void nativeMethod();
private void callback(){
System.out.println("In Java");
}
public static void main(String args[]){
InstanceMethodCall c = new InstanceMethodCall();
//java call C
c.nativeMethod();
}
static{
System.loadLibrary("InstanceMethodCall");
}
}
How to call java from c?
1. GetMethodID.
Class, Method name and Descriptor.
//1. Class
//2. Method Name.
//3. Descriptor.
(*env)->GetMethodID(env, cls, "callback", "()V");
2. Call Method.
Object and Method ID.
//1. object
//2. Method ID.
(*env)->CallVoidMethod(env, obj, mid);
Other Functions:
CallIntMethod
CallObejctMethod