java — JNI ByteBuffer помещает байты

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: положить

Есть идеи, что я сделал не так? Я не очень хорошо знаю JNI, и в основном я перерабатывал примеры, которые я нашел в Интернете.

2

Решение

Подпись метода (I, B)Ljava/nio/ByteBuffer неправильно. Здесь нет , между аргументами в сигнатурах методов и классах L<class>; (ты забыл ;).

Итак, правильная подпись: (IB)Ljava/nio/ByteBuffer;

Тогда код должен работать.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]