使用jusbpmp lib时出错

时间:2015-11-16 11:34:49

标签: java

我正在尝试使用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();

1 个答案:

答案 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支持)。