使用 JNI 将 jbyte 数组发送到 Java 方法失败
Sending jbyte array to Java method failed using JNI
考虑这个java方法:
public int write(byte[] src, int timeoutMillis) throws IOException {
System.out.println("Write function started.");
System.out.println("buffer = " + src.length);
System.out.println("buffer = " + src[0]);
return 1;
}
我尝试使用 Qandroid JNI 从 c++ 使用此方法。这是我用 C++ 编写的代码:
jbyteArray buffer = env->NewByteArray(3);
jbyte *bytes = env->GetByteArrayElements( buffer, 0);
bytes[0]=1;
bytes[1]=2;
bytes[2]=3;
env->SetByteArrayRegion(buffer,0,3,bytes);
jniObject.callMethod<jint>("write","([Ljava/lang/byte;I)I",buffer,1000);
根据Java代码的签名。我是否正确使用了 callMethod?为什么它根本不 运行?它在控制台中不打印任何内容!没有异常没有错误!
供您参考,我正在尝试使用 JNI 打开 USB 串行设备。我成功打开了设备,得到了 UsbDeviceConnection 对象。串口已成功打开,一切正常。但是这里写函数不起作用。它似乎根本没有进入功能。我没有收到任何错误。我认为问题是我为该方法提供的签名字符串或缓冲区对象?你对此有何看法?
感谢您的帮助。
jbyteArray
类型的签名是 [B
。所以方法调用应该是这样的:
jniObject.callMethod<jint>("write","([BI)I",buffer,1000);
考虑这个java方法:
public int write(byte[] src, int timeoutMillis) throws IOException {
System.out.println("Write function started.");
System.out.println("buffer = " + src.length);
System.out.println("buffer = " + src[0]);
return 1;
}
我尝试使用 Qandroid JNI 从 c++ 使用此方法。这是我用 C++ 编写的代码:
jbyteArray buffer = env->NewByteArray(3);
jbyte *bytes = env->GetByteArrayElements( buffer, 0);
bytes[0]=1;
bytes[1]=2;
bytes[2]=3;
env->SetByteArrayRegion(buffer,0,3,bytes);
jniObject.callMethod<jint>("write","([Ljava/lang/byte;I)I",buffer,1000);
根据Java代码的签名。我是否正确使用了 callMethod?为什么它根本不 运行?它在控制台中不打印任何内容!没有异常没有错误!
供您参考,我正在尝试使用 JNI 打开 USB 串行设备。我成功打开了设备,得到了 UsbDeviceConnection 对象。串口已成功打开,一切正常。但是这里写函数不起作用。它似乎根本没有进入功能。我没有收到任何错误。我认为问题是我为该方法提供的签名字符串或缓冲区对象?你对此有何看法? 感谢您的帮助。
jbyteArray
类型的签名是 [B
。所以方法调用应该是这样的:
jniObject.callMethod<jint>("write","([BI)I",buffer,1000);