OzB*_*rry 2 c++ java 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;
}
Run Code Online (Sandbox Code Playgroud)
所以,我有一个字节缓冲区,并且在Java中我已经分配了适当的大小,并注意到可以使用ByteBuffer.put(索引,字节),所以我试图获得该方法,但是当我在Java中时,我获得以下运行时异常:
java.lang.NoSuchMethodError:put
我做错了什么想法?我不太了解JNI,并且大部分时间都是我在网上找到的重复工作示例.
方法签名(I, B)Ljava/nio/ByteBuffer是错误的.,方法签名和类中的参数之间没有L<class>;(你忘记了;).
所以正确的签名是: (IB)Ljava/nio/ByteBuffer;
然后代码应该工作.