为什么我使用Jni onload但是没有使用javah的输出时出错?

时间:2012-11-14 21:41:19

标签: java android java-native-interface javah

我有这个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。

由于

1 个答案:

答案 0 :(得分:1)

方法签名中缺少分号。它根本不“对应”。不要猜测本机方法签名:使用javap -s的输出。剪切和粘贴。