我正在尝试使用Java访问USB端口。我正在使用Java 1.7.0_45的Jusbpmp 0.1.5。我尝试在Mac OS X中测试它时出现以下错误。
java.lang.Exception: Unknown OS
at jpmp.manager.DeviceManager.loadPmpLib(Unknown Source)
at jpmp.manager.DeviceManager.<init>(Unknown Source)
at jpmp.manager.DeviceManager.getInstance(Unknown Source)
at USB.main(USB.java:12)
这是我的代码:
import java.util.Iterator;
import java.util.LinkedList;
import jpmp.device.UsbDevice;
import jpmp.manager.DeviceManager;
import jpmp.notifier.IDeviceTransferNotifier;
import jpmp.notifier.IParseTreeNotifier;
public class USB {
public static void main(String[] args) {
try{
DeviceManager dm = DeviceManager.getInstance();
dm.createInstance();
dm.scanDevices();
Iterator it = dm.getDeviceList().keySet().iterator();
String devkey = (String)it.next();
UsbDevice usbdev = (UsbDevice)dm.getDeviceList().get(devkey);
System.out.println(usbdev.dump());
}catch(Exception e){
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
//USB 연결확인 함수
static boolean isConnected(String filterProductName, String filterProductid, String filterVendorid){
try {
DeviceManager dm;
dm = DeviceManager.getInstance();
dm.createInstance();
dm.scanDevices();
if (dm.getDeviceList() != null && dm.getDeviceList().size() > 0) {
for (Iterator it = dm.getDeviceList().keySet().iterator(); it.hasNext();) {
String devkey = (String) it.next();
UsbDevice usbdev = (UsbDevice) dm.getDeviceList().get(devkey);
if ((usbdev.getPid().equals(filterProductid) && usbdev.getVid().equals(filterVendorid)) || usbdev.getName().equals(filterProductName)) {
return true;
}
}
}
} catch (Throwable ex) {
ex.printStackTrace();
}
return false;
}
//USB 파일전송 함수
static void TransUsb() throws Throwable{
DeviceManager dm = DeviceManager.getInstance();
dm.createInstance();
dm.scanDevices();
String filterProductid = "0x2211"; //productid
String filterVendorid = "0x0ea0"; //vendorid
UsbDevice usbdevFound = null;
if (dm.getDeviceList() != null && dm.getDeviceList().size()>0){
for ( Iterator it = dm.getDeviceList().keySet().iterator(); it.hasNext(); ){
String devkey = (String)it.next();
UsbDevice usbdev = (UsbDevice)dm.getDeviceList().get(devkey);
if (usbdev.getPid().equals(filterProductid) && usbdev.getVid().equals(filterVendorid)){
usbdevFound = usbdev;
}
}
}
if (usbdevFound != null) {
String fileToSend = "C:\\videofile.avi";
usbdevFound.sendFile(fileToSend, "/Video", null, null);
}
dm.releaseInstance();
}
}
错误发生在该行:
DeviceManager dm = DeviceManager.getInstance();
答案 0 :(得分:1)
引自jusbpmp home page(强调我的):
Jusbpmp是一个Java库,允许与Linux或Windows上的便携式USB播放器(支持MSC或MTP)进行通信。
所以看来这个库不适用于Mac OS。
另一种方法是使用明确支持Linux,OS X和Windows的usb4java:
支持的平台是Linux(x86 32/64位,ARM 32位),OS X(x86 32/64位)和Windows(x86 32/64位)。但是其他平台也可以通过手动编译JNI库来工作(只要它们至少具有Java 6并且受libusb支持)。