JNI ByteBuffer放了字节

时间:2012-09-07 17:44:43

标签: java c++ java-native-interface bytebuffer nosuchmethoderror

JNIEXPORT jboolean JNICALL Java_directshowcamera_dsInterface_grab_1frame_1stream(JNIEnv *env, jobject obj, jint streamid, jobject barray)
{
    jclass bbclass = env->FindClass( "java/nio/ByteBuffer" );
    jmethodID putMethod = env->GetMethodID(bbclass, "put", "(I, B)Ljava/nio/ByteBuffer");
    unsigned char *buffer = stream_buffer( streamid );

    if( !stream_image_ready( streamid ) ) return (jboolean)0;

    for(int i=0; i < stream_device_size( streamid ); i++ ) {
        env->CallByteMethod( barray, putMethod, i, (jbyte)buffer[i] );
    }

    return (jboolean)1;
}

所以,我有一个字节缓冲区,并且在Java中我已经分配了适当的大小,并注意到可以使用ByteBuffer.put(index,byte),所以我试图获取方法,但是当我这样做时Java,我得到以下运行时异常:

  

java.lang.NoSuchMethodError:put

任何想法我做错了什么?我不太了解JNI,而且大部分时间都是我在网上找到的重复工作的例子。

1 个答案:

答案 0 :(得分:6)

方法签名(I, B)Ljava/nio/ByteBuffer错误。方法签名中的参数之间没有,,类是L<class>;(您忘记了;)。

所以正确的签名是:(IB)Ljava/nio/ByteBuffer;

然后代码应该可以工作。