問題を回避することができないため、どのJNIエキスパートでも次のような状況を説明できますか?Java、JNI、クラス宣言
たちは、このクラスを持っていると言う:JNI(C)で
public class MyClass {
static {
System.loadLibrary("recorder");
}
private native long function1();
private native void function2();
private void callback() {
}
public static void main(String[] args) throws Exception {
MyClass obj1 = new MyClass();
obj1.function1();
}
}
:
JNIEXPORT jstring JNICALL function1(JNIEnv *env, jobject object) {
jclass cls = (*env)->GetObjectClass(env, object);
jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "()V");
if (mid != NULL) {
(*env)->CallVoidMethod(env, object, mid);
}
}
代わり
private native long function1();
の私は
を宣言する場合、これは、しかし、正常に動作しますprivate static native long function1();
JNIからJavaへの呼び出しで、Javaで関数コールバックが見つからないと不平を言って失敗します。静的なネイティブメソッドの場合
おかげ
'function1()'の静的バージョンを呼び出すと、 'object'引数がNULLになると思います。したがって、 'cls'もNULLで、' mid'もNULLです。 – gudok