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 设备是自己研制出来的,还没来得及为各种平台写驱动程序,你可以用这个组件提供驱动程序
    1. 从:http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/ 下载 libusb-win32-bin-1.2.2.0.zip
    2. 从 http://sourceforge.net/projects/libusbjava/files/libusbjava-snapshots/20090517/ 下载 ch.ntb.usb-0.5.9.jar 和 LibusbJava_dll_0.2.4.0.zip
    3. 安装 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设备是新安装的,且你没有重启计算机。你重启一下计算机,再进行上述步骤,应该就可以了。
    4. 把 LibusbJava.dll 复制到 windows/system32 目录下
    5. 这时,到达 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);更正的代码可以参考如下代码:
      1. byte[] parseByteArray(String s) {
      2. String[] hexs = s.split(" ");
      3. byte[] bytes = new byte[hexs.length];
      4. if(hexs.length > 0){
      5. int i = 0;
      6. for(String hex : hexs){
      7. String s1 = hex.substring(2);
      8. bytes[i] = (byte)(Integer.parseInt(s1, 16));
      9. i++;
      10. }
      11. }
      12. return bytes;
      13. }
      1. byte[] parseByteArray(String s) {
      2. String[] hexs = s.split(" ");
      3. byte[] bytes = new byte[hexs.length];
      4. if(hexs.length > 0){
      5. int i = 0;
      6. for(String hex : hexs){
      7. String s1 = hex.substring(2);
      8. bytes[i] = (byte)(Integer.parseInt(s1, 16));
      9. i++;
      10. }
      11. }
      12. return bytes;
      13. }

      重新编译后,替换掉这个类,即可。

java 访问 usb的更多相关文章

  1. Java访问USB设备

    最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到 ...

  2. java访问修饰符

    了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...

  3. [THINKING IN JAVA]访问权限控制

    6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...

  4. C# 访问USB(HID)设备

    原文:C# 访问USB(HID)设备 二话不说,直接给代码,如果您真想做这方面的东西,还是稍微研究下,没有现成的好类用,就需要自己了解其原理 //引用空间 using System; using Sy ...

  5. java访问权限的问题

    java访问权限的问题 java 访问权限 修饰符 背景: 关于java中的四种访问修饰符,public ,default ,protected ,private的作用范围本以为很熟悉了,但碰到了这样 ...

  6. Hadoop(五)搭建Hadoop与Java访问HDFS集群

    前言 上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat ...

  7. java访问权限修饰符

    作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × ja ...

  8. MinerQueue.java 访问队列

    MinerQueue.java 访问队列 package com.iteye.injavawetrust.miner; import java.util.HashSet; import java.ut ...

  9. 论Java访问权限控制的重要性

    人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...

随机推荐

  1. Debian 配置apt-get源

    1.配置apt-get源 cp  /etc/apt/sources.list  /etc/apt/sources.listbak   #备份原有配置文件       nano  /etc/apt/so ...

  2. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  3. 配置TFS2010的用户截图

    先要添加一个管理用户

  4. java课后作业5

    [问题]随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路: 1.申请一个长度为10的数组 2.计算机随机生成10个数,并赋给数组 3. ...

  5. September 26th 2016 Week 40th Monday

    The land didn't move, but moved. The sea wasn't still, yet was still. 大地止而亦行,大海动而亦静. Still waters ru ...

  6. July 7th, Week 28th Thursday, 2016

    The 79th Anniversary of Anti-Japan War Difficulties vanish when faced bodly. 勇敢面对困难,困难自会退让. The best ...

  7. Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]

    平时用的都是Centos系统,今天偶然在Ubuntu下编译了一次代码,发现报错了: 源码: #include <stdio.h> #include <sys/time.h> # ...

  8. 关于HTML5在动画制作工具Animatron的一些问题

    Animatron是国外一款在线HTML5动画制作工具,网址:www.animatron.com 当然,想使用的话,是需要FQ的. 用animatron制作好的动画是可以下载为代码和GIF的,这时候付 ...

  9. Java多线程---同步与锁

    一,线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 二.同步和锁定 1.锁的原理 Java中每个对象都有一个内置锁. 当程序运行到非静态的synchronized同步方法上时,自动 ...

  10. Label Font 字体样式设置

    label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24]; 字体名如下: Font Family: Amer ...