我有这个java方法:
public static native void processBuffer(ByteBuffer bb);
使用javah
JNIEXPORT void JNICALL Java_com_lan_factorial_IssmJni_processBuffer
(JNIEnv *env, jclass klass , jobject buf)
完美地工作
使用Jni onload
static JNINativeMethod method_table[] = {
{"fac" , "(J)J" , (void *) factorial},
{"getBuffer", "()[D" , (void *) getBufferNative},
//{"processBuffer", "(Ljava/nio/ByteBuffer)V", (void *) fillBuffer}};
此表中的其他方法工作,执行最后一个对应于上面javah生成的方法。当然,如果我执行JNI onload,我将有一个方法调用fillBuffer。
有人可以解释为什么javah可以工作而不是jni_onload。我做错什么了吗? 我有其他使用jni_onload的方法,所以我想远离javah。
由于
答案 0 :(得分:1)
方法签名中缺少分号。它根本不“对应”。不要猜测本机方法签名:使用javap -s的输出。剪切和粘贴。