我用 JavaFX GUI 编写了一个演示应用程序,它必须从 USB 设备读取串行和某种硬件 ID。我正在使用 javax.usb (usb4java) 库
<dependency>
<groupId>org.usb4java</groupId>
<artifactId>usb4java-javax</artifactId>
<version>1.2.0</version>
</dependency>
访问和声明设备:
UsbConfiguration configuration = imuniqe.getActiveUsbConfiguration();
UsbInterface iface = (UsbInterface) configuration.getUsbInterfaces().get(0); // FIXME
iface.claim(new UsbInterfacePolicy() {
@Override
public boolean forceClaim(UsbInterface arg0) {
return true;
}
});
如果我用 sudo 启动程序,在我的 Ubuntu 14.04 系统上运行该应用程序就可以了。
但是如果我在带有 Java 8 的 MacBook Pro (OS X 10.9.5) 上运行它,我会得到以下异常:
javax.usb.UsbPlatformException: USB error 3: Unable to claim interface: Access denied (insufficient permissions)
at
org.usb4java.javax.ExceptionUtils.createPlatformException(ExceptionUtils.java:39)
at
org.usb4java.javax.AbstractDevice.claimInterface(AbstractDevice.java:430)
at
org.usb4java.javax.Interface.claim(Interface.java:102)
...
即使使用 sudo 运行应用程序也不会改变其行为。
我错过了什么重要的东西吗?有什么技巧可以让我的应用程序在 OS X 上声明 USB 接口吗?