① java如何實現usb口插拔事件的監測,最好有源代碼
java 要訪問 usb 設備,通常要自己寫c/c++代碼,然後再用 java 訪問這些組件,以達到控制usb設備的目的。但現在有一個開源組件 libusb 幫我們做好了訪問usb設備的封裝(包括windows、linux等平台)。我們用 java 訪問usb 設備時,可以通過訪問 libusb 組件提供的介面即可。要了解這個組件的 java 部分的 Demo、API等,可以訪問這里:http://libusbjava.sourceforge.net/
使用這個組件最重要的意義在於:
首先,你不再需要在 win、linux 等平台上寫 c/c++ 等 native 組件,甚至,你不需要知道 jni 怎麼寫;
其次,使用這個組件,你可以訪問所有的 usb 設備,當然,前提條件是你必須知道 usb 設備的相關指令(我當前就用這個組件,直接發usb能接受的命令,去控制我的指紋儀來工作)
最後,如果你的 usb 設備沒有驅動程序,比如,你的 usb 設備是自己研製出來的,還沒來得及為各種平台寫驅動程序,你可以用這個組件提供驅動程序
從:http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/ 下載 libusb-win32-bin-1.2.2.0.zip
從 http://sourceforge.net/projects/libusbjava/files/libusbjava-snapshots/20090517/ 下載 ch.ntb.usb-0.5.9.jar 和 LibusbJava_dll_0.2.4.0.zip
安裝 libusb-win32:
1)、解壓 libusb-win32-bin-1.2.2.0.zip;
2)、把目錄:\bin\x86 下的 libusb0_x86.dll 復制到 windows/system32 目錄下,並改名為:libusb0.dll;
3)、把目錄:\bin\x86 下的 libusb0.sys 復制到 windows/system32/drivers 目錄下
4)、運行 install-filter-win.exe ,從中選擇安裝你要訪問的 usb 設備
5)、運行 testlibusb-win.exe,有正確的提示信息。如下圖:
注意:如果你運行第4)步時,出現無法安裝libusb0服務、無法找到文件等錯誤,或者運行第5)步時,界面中「Driver version:」後面的版本號是,-1.-1 -1 ...這些情況,說明你的安裝不正常。原因可能是因為你的usb設備是新安裝的,且你沒有重啟計算機。你重啟一下計算機,再進行上述步驟,應該就可以了。
把 LibusbJava.dll 復制到 windows/system32 目錄下
這時,到達 ch.ntb.usb-0.5.9.jar 所在的目錄,運行: java -jar ch.ntb.usb-0.5.9.jar,這樣就會出來一個java swing做的窗口,如下圖。
當右鍵點擊倒數第二級的節點的時候,又會彈出新的窗口,在這個彈出窗口裡,你可以直接發送一些16進制的代碼給 usb 設備。但值得注意的是,這個窗口的代碼寫得有問題,其對16進制的代碼轉換為真正要發送的代碼時,轉換的是錯誤的代碼。這個錯誤可以自己下載源碼,更正即可。錯誤的類及方法是:
TestApp.java 中的方法:byte[] parseByteArray(String s);更正的代碼可以參考如下代碼:
Java代碼
重新編譯後,替換掉這個類,即可。
byte[] parseByteArray(String s) {
String[] hexs = s.split(" ");
byte[] bytes = new byte[hexs.length];
if(hexs.length > 0){
int i = 0;
for(String hex : hexs){
String s1 = hex.substring(2);
bytes[i] = (byte)(Integer.parseInt(s1, 16));
i++;
}
}
return bytes;
}