跨平台通用的HID、USB串口JAVA桌面应用

记录一下从零开始开发一个Windows和Linux通用的HID和USB串口的JAVA应用DEMO,实现简单的连接,收发数据。

开发工具:IDEA,自行查询下载安装步骤,我安装的版本是2018.3,参考网上教程第一次使用,怕界面不一致所以安装旧点的。

一、HID库

HID库源码:https://hub.連接.台灣/signal11/hidapi,需要下载源码编译自定义的java native接口的库。

1.编译Windows下的dll:

参考库的readme.txt可以先在windows的VS上编译dll,需要添加依赖库setupapi.lib,测试通讯是否正常,最后编译的时候最好选择属性/C++/代码生成为MT或者MTD减少依赖的动态库。用java jni native windows关键词查询window jni使用教程,编译dll,在java层调用测试。

比如:https://www.cnblogs.com/sysu-huangwei/p/7466481.html

2.编译Linux下的so:

Linux端同理,需要依赖libudev,没有的话需要先安装。源码使用linux/hid.c,编译生成so。在Linux上进行测试,可以用javac指令编译生成class文件,运行测试。运行的时候如果找不到类可能需要加上包名:java 包名.类名。

根据以上步骤,在Windows和Linux端都成功编译生成了库,并且测试可以正常收发数据,剩下的就是应用界面开发以及调用库接口就可以了。

 

二、USB串口库

USB串口库:http://rxtx.qbang.org/wiki/index.php/Download

串口库使用可参考:https://blog.csdn.net/kong_gu_you_lan/article/details/52302075

我使用的版本是rxtx-2.2pre2-bins,解压后将RXTXcomm.jar和rxtxSerial.dll移动到IDEA工程目录的libs目录下,没有就新建一个,编译的HID库也移动到此目录下,在IDEA设置中添加依赖库路径,即libs的路径。

rxtx-2.2pre2-bins版本有个坑,在Linux下,枚举不到ttyACM0串口,参考https://bugs.launchpad.net/ubuntu/+source/rxtx/+bug/367833,需要添加

if(System.getProperty("os.name").toLowerCase().contains("linux"))
System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0")

再获取系统的所有串口,不限制在Linux下会影响Windows下枚举串口。

 

 

 

 导入jar包:

 

 

 

 转载请注明出处:https://www.cnblogs.com/linguinost/p/15922914.html

三、IDEA新建工程:

1.新建工程教程:https://www.jianshu.com/p/cdca9a30b86b

用到的组件有JButton(按钮)、JTextArea(不带拖动条)、TextArea(自带拖动条)、JLabel(说明,配合JTextField使用)、JTextField(输入文本框)、JComboBox(多选框)。

布局使用固定布局,setLayout(null),使用setBounds标记位置和长宽,使用addActionListener实现按钮点击后的操作,最后完成的界面如下:

 

 

2.打包生成可运行jar:

file - project structure

需要注意META-INF文件夹路径,选错可能生成的jar没有编进全部java文件,可以解压查看jar是否编译正常。

新建lib目录,右键将依赖的串口jar添加进去:

 

打包生成jar,将dll库以及串口jar复制到打包生成的jar所在文件夹的lib内,运行.bat测试:

 

bat内容,将当前lib文件夹临时加入环境变量,运行jar:

@echo off
set PwdPath=%~dp0\lib
echo %PwdPath%
set PATH=%PATH%;%PwdPath%
java -jar xxx.jar
pause

也可以直接把动态库复制到C:\Windows\System32(Windows)或/usr/lib(Linux),运行java -jar xxx.jar。Linux环境下可能需要root权限,我在ubuntu虚拟机测试,没有root权限不能连接HID或者USB串口。

 

posted @ 2022-02-22 14:16  linguinost  阅读(973)  评论(0编辑  收藏  举报