十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
java 要訪問 usb 設(shè)備,通常要自己寫c/c++代碼,然后再用 java 訪問這些組件,以達到控制usb設(shè)備的目的。但現(xiàn)在有一個開源組件 libusb 幫我們做好了訪問usb設(shè)備的封裝(包括windows、linux等平臺)。我們用 java 訪問usb 設(shè)備時,可以通過訪問 libusb 組件提供的接口即可。要了解這個組件的 java 部分的 Demo、API等,可以訪問這里:
專注于為中小企業(yè)提供成都網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)滕州免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
使用這個組件最重要的意義在于:
首先,你不再需要在 win、linux 等平臺上寫 c/c++ 等 native 組件,甚至,你不需要知道 jni 怎么寫;
其次,使用這個組件,你可以訪問所有的 usb 設(shè)備,當然,前提條件是你必須知道 usb 設(shè)備的相關(guān)指令(我當前就用這個組件,直接發(fā)usb能接受的命令,去控制我的指紋儀來工作)
最后,如果你的 usb 設(shè)備沒有驅(qū)動程序,比如,你的 usb 設(shè)備是自己研制出來的,還沒來得及為各種平臺寫驅(qū)動程序,你可以用這個組件提供驅(qū)動程序
從: 下載 libusb-win32-bin-1.2.2.0.zip
從 下載 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 設(shè)備
5)、運行 testlibusb-win.exe,有正確的提示信息。如下圖:
注意:如果你運行第4)步時,出現(xiàn)無法安裝libusb0服務(wù)、無法找到文件等錯誤,或者運行第5)步時,界面中“Driver version:”后面的版本號是,-1.-1 -1 ...這些情況,說明你的安裝不正常。原因可能是因為你的usb設(shè)備是新安裝的,且你沒有重啟計算機。你重啟一下計算機,再進行上述步驟,應(yīng)該就可以了。
把 LibusbJava.dll 復制到 windows/system32 目錄下
這時,到達 ch.ntb.usb-0.5.9.jar 所在的目錄,運行: java -jar ch.ntb.usb-0.5.9.jar,這樣就會出來一個java swing做的窗口,如下圖。
當右鍵點擊倒數(shù)第二級的節(jié)點的時候,又會彈出新的窗口,在這個彈出窗口里,你可以直接發(fā)送一些16進制的代碼給 usb 設(shè)備。但值得注意的是,這個窗口的代碼寫得有問題,其對16進制的代碼轉(zhuǎn)換為真正要發(fā)送的代碼時,轉(zhuǎn)換的是錯誤的代碼。這個錯誤可以自己下載源碼,更正即可。錯誤的類及方法是:
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;
}
以前試過,是用這個軟件通過COM口傳輸數(shù)據(jù)給單片機。后來發(fā)現(xiàn),因為JAVA的專長不是硬件方面的。所以JAVA的串口方面的類不太好用(JAVA的程序接USB接口的我還沒試過),建議如果為了工作的話,還是用VC好,JAVA的程序還得裝運行環(huán)境。~而且對一樓的說一下,如果做工程項目的話,不僅僅考慮能通訊上就行,還得考慮以后的維護,在一個公司里基...
這句先從new UsbMouse() 開始理解,意思是實例化一個UsbMouse對象,然后將這個對象作為參數(shù)傳遞給靜態(tài)方法public static void useUSB(USB u),就是這個意思。
如果把useUSB(new UsbMouse())拆成兩行代碼,是這樣的:
UsbMouse u = new UsbMouse(); //實例化一個UsbMouse.
useUSB(u); //調(diào)用靜態(tài)方法.
明白了嗎
檢測一個JAVA程序的運行時間方法:
long startTime = System.currentTimeMillis();//獲取當前時間
//doSomeThing(); //要運行的java程序
long endTime = System.currentTimeMillis();
System.out.println("程序運行時間:"+(endTime-startTime)+"ms");
//抽象的形狀類
abstract class Shape{
abstract double getArea(); //抽象的求面積方法
}
//矩形類
class Rectangle extends Shape{
protected double width;
protected double height;
public Rectangle(double width, double height){
this.width = width;
this.height = height;
}
@Override
double getArea() { //實現(xiàn)父類的方法
return this.width * this.height;
}
}
//橢圓類
class Ellipse extends Shape{
protected double a;
protected double b;
public Ellipse(double a, double b){
this.a = a;
this.b = b;
}
@Override
double getArea() {
return Math.PI * this.a * this.b;
}
}
public class TestAbstract {
public static void main(String[] args) {
Shape s;
s = new Rectangle(3, 4);
System.out.println("矩形的面積 : " + s.getArea());
s = new Ellipse(4, 3);
System.out.println("橢圓的面積 : " + s.getArea());
}
}