我使用以下代码来获取连接到系统的usb设备的manufacturerCode。我添加了jsr80-1.0.1 jar。我收到以下错误javax.usb.UsbException:
找不到属性文件javax.usb.properties。
有什么建议吗?
import java.io.UnsupportedEncodingException;
import java.util.*;
import javax.usb.*;
public class USBListener {
public static void main(String[] args) {
try{
UsbServices services = UsbHostManager.getUsbServices();
UsbHub root = services.getRootUsbHub();
listDevices(root);
} catch (Exception e) {
System.out.println(e);
}
}
public static void listDevices(UsbHub hub) throws UnsupportedEncodingException, UsbException {
List devices = hub.getAttachedUsbDevices();
Iterator iterator = devices.iterator();
while(iterator.hasNext()) {
UsbDevice device = (UsbDevice)iterator.next();
describe(device);
if(device.isUsbHub()) {
System.out.println("is hub");
}
}
}
public static void describe(UsbDevice device)
throws UnsupportedEncodingException, UsbException {
UsbDeviceDescriptor descriptor = device.getUsbDeviceDescriptor();
byte manufacturerCode = descriptor.iManufacturer();
System.out.println("Manufacturer index: " + manufacturerCode);
System.out.println("Manufacturer String: " + device.getString(manufacturerCode));
System.out.println("USB version: " + decodeBCD(descriptor.bcdUSB()));
System.out.println("Maximum control packet size: " + descriptor.bMaxPacketSize0());
}
public static String decodeBCD(short bcd) {
int upper = (0xFF00 & bcd) >> 8;
int middle = (0xF0 & bcd) >> 4;
int lower = 0x0F & bcd;
return upper + "." + middle + "." + lower;
}
}
答案 0 :(得分:2)
您需要在类路径中使用此文件。来自文档:
javax.usb.properties文件是一个Java属性文件 API实现加载器类所需的。属性文件 必须可以通过正常方式加载(即它必须在CLASSPATH中) 它必须包含属性javax.usb.services。这个性质 必须定义。它的值必须是a的完全限定类名 实现接口javax.usb.UsbServices的类。这个班 将作为javax.usb的实现加载。
而且,如果你看到这个错误,你可能没有javax.usb实现:
你需要一个javax.usb实现;该文件由所有人提供 javax.usb实现
见这里:http://javax-usb.sourceforge.net/faq.html#what_is_properties_file