JNI如何调用Java函数

有时候在jni层也需要调用Java层来完成一些功能,例如Java层有函数Media.JavaFunc(Media)。JNI如何才能根据函数名找到对Java函数的引用呢?

首先需要找到函数所属的类,可以通过jc=env->FindClass("Medir")找到。

其次根据上面的类的引用和函数名已经函数签名就可以找到函数,func=env->GetMethonID(jc,"JavaFunc","...")

最后调用env->CallVoidMethod(obj,func,obj)。obj表示Java对象在jni中的引用。

然而问题是如果obj(注意是在Java层创建的)已经被Java的垃圾回收机制回收了怎么办?可以通过调用env->NewGlobalRef(obj)来保证obj不会被回收,除非再调用env->DeleteGlobal(obj)。

你可能感兴趣的:(JNI如何调用Java函数)