获取错误java.io.IOException:参数不正确
我使用获取错误java.io.IOException:参数不正确,java,Java,我使用hidapi jni.dll/hidapi jni.so并用Java编写程序来读写数据到我的设备。我的设备定义为HID设备。我的代码在linux(Debian 7.1)上运行得很好,我可以从设备读写数据。但在Windows(Windows 7和XP)上,我只能读取数据,当尝试写入时,我会出现以下错误: java.io.IOException: The parameter is incorrect. 写入方法的一部分是: try { HIDManager hid_mgr = HI
hidapi jni.dll/hidapi jni.so
并用Java编写程序来读写数据到我的设备。我的设备定义为HID设备。我的代码在linux(Debian 7.1)上运行得很好,我可以从设备读写数据。但在Windows(Windows 7和XP)上,我只能读取数据,当尝试写入时,我会出现以下错误:
java.io.IOException: The parameter is incorrect.
写入方法的一部分是:
try {
HIDManager hid_mgr = HIDManager.getInstance();
dev = hid_mgr.openById(VENDOR_ID, PRODUCT_ID, null);
byte[] by = new byte[4];
by[0] = (byte) 1;
by[1] = (byte) 2;
by[2] = (byte) 3;
by[3] = (byte) 4;
dev.write(by);
} catch (IOException | NullPointerException ne) {
System.err.println(ne);
}
如何修复此错误?@Hassan Amiri:基本上Linux会将地址转换为值并进行写入,但windows确实会纠正。。对ur数组使用Foreach循环,然后写入数据
try {
HIDManager hid_mgr = HIDManager.getInstance();
dev = hid_mgr.openById(VENDOR_ID, PRODUCT_ID, null);
byte[] by = new byte[4];
by[0] = (byte) 1;
by[1] = (byte) 2;
by[2] = (byte) 3;
by[3] = (byte) 4;
for(byte b : by){ dev.write(b);}}
我为我的错误找到了解决办法。 在windows中,第一个字节将是0。那么我的代码是:
by[0] = 0;
如果我通过
dev.write(by);
正常工作。首先不要隐藏异常堆栈跟踪。如果无法处理异常,请不要捕获它。或者至少使用
ne.printStackTrace()
打印堆栈跟踪。确保不同系统中的字节顺序相同。我知道windows和unix之间有区别。由于您处于字节级别,因此可能需要根据操作系统反转代码中的字节顺序。我会在代码中抛出System.out.println()来打印字节值,然后比较每个系统的输出。问题是什么?(不是downvoter)“但是windows确实正确”除了语法错误之外,听起来你在反驳海报上关于windows的说法,不要说为什么他这样做是错误的,为什么你的方法是正确的。然后说你以前写整个数组时遇到了问题,但是当你一个字节一个字节地写出来时就不再有问题了。如果你忍住不说,有人只是瞥了一眼你说的话,就会认为你只是在胡乱扔东西,希望它是对的。@Hi Luckyman Nevermore!!!在hidapi jni方法中写入获取字节的数组,如果发送字节则获取错误。写入(字节[]是)。错误代码的堆栈跟踪为:java.io.IOException:参数不正确。com.codeminders.hidapi.HIDDevice.write(本机方法),PKGMain.hidapi.readDevice(hidapi.java:133),PKGMain.hidapi.connectDevice(hidapi.java:43),PKGMain.DriverClass.run(DriverClass.java:7),java.lang.Thread.run(Thread.java:722)