官网及下载地址:http://fizzed.com/oss/rxtx-for-java需要注意的是导入jar包后还需要在classpath下放好
rxtxParallel.dll
和rxtxSerial.dll
(或者放到PATH下)。import gnu.io.*;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashSet;
public class ComHelper {public static HashSet getAvailableSerialPorts() {
HashSet h = new HashSet<>();
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
CommPortIdentifier com =portList
.nextElement();
switch (com.getPortType()) {
case CommPortIdentifier.PORT_SERIAL:
try {
//open:(应用程序名【随意命名】,阻塞时等待的毫秒数)
/*open 方法打开通讯端口,获得一个 CommPort 对象,它使程序独占端口。
如果端口正被其他应用程序占用,将使用 CommPortOwnershipListener 事件机制
传递一个 PORT_OWNERSHIP_REQUESTED 事件。
每个端口都关联一个 InputStream 和一个 OutputStream,如果端口是用
open 方法打开的,那么任何的 getInputStream 都将返回相同的数据流对象,除非
有 close 被调用。
*/
CommPort thePort = com.open(Object.class.getSimpleName(), 50);
thePort.close();
h.add(com);
} catch (PortInUseException e) {
//不可用串口
System.out.println("Port, " + com.getName()
+ ", is in use.");
} catch (Exception e) {
System.err.println("Failed to open port " + com.getName());
e.printStackTrace();
}
}
}
return h;
}
public static SerialPort openComm(String commStr){
HashSet portSet = ComHelper.getAvailableSerialPorts();
SerialPort serialPort=null;
for (CommPortIdentifier comm : portSet) {
if (comm.getName().equals(commStr)) {
try {
// open:(应用程序名【随意命名】,阻塞时等待的毫秒数)
serialPort = (SerialPort) comm.open("whatever",
2000);
serialPort.notifyOnDataAvailable(true);
// 这里定义了波特率,数据位,停止位,校验位
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
break;
} catch (PortInUseException e) {
e.printStackTrace();
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
}
}
}
return serialPort;
}public static String readData(SerialPort serialPort){
String str="";
try {
if(serialPort!=null){
InputStream inputStream = serialPort.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i;
while ((i = inputStream.read()) != -1) {
baos.write(i);
}
str = baos.toString();
}} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
return str;
}}
【【Java】Java串口通讯库Rxtx初步使用】使用方法:
SerialPort serialPort = ComHelper.openComm("COM4");
while (true) {
String comdata = https://www.it610.com/article/ComHelper.readData(serialPort);
}
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)