Java实现串口通信出现闪退
Java实现串口通信,多个串口操作时出现闪退
1.串口通信
- Java实现串口通信:使用RXTXcomm.jar
2.现象描述
崩溃现象:
程序使用rxtx.jar进行串口通信开发,同时进程多个串口双向通信,假设使用到的串口名称为COM1和COM2
- com1开启,com2开启-->OK
- com1关闭-->OK
- com1第二次开启----->奔溃
崩溃描述:
使用多个串口,如果有串口要进行第二次开启,且这个串口在机器上扫描出来是第一个串口的话,需先将所有串口都关闭后再执行串口开启,否则就会出现错误
实验工具
- 使用虚拟串口工具生成虚拟串口:VSPD
- RXTX官网:下载Windows-x64版本,,这包很老了:Based on CVS snapshot of RXTX taken on 2008-12-07
项目结构

实验代码
package com.tcb;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
public class SerialPortTest {
public static void main(String[] args) throws NoSuchPortException, PortInUseException {
SerialPort com1 = openPort("COM1");
SerialPort com2 = openPort("COM2");
SerialPort com3 = openPort("COM3");
com2.close();
com3.close();
com2 = openPort("COM2");
com3 = openPort("COM3");
com2.close();
com2 = openPort("COM2");
com2.close();
com3.close();
com1.close();
com1 = openPort("COM1");
com1.close();
}
private static SerialPort openPort(String portName) throws NoSuchPortException, PortInUseException {
CommPortIdentifier comPI = CommPortIdentifier.getPortIdentifier(portName);
SerialPort com = (SerialPort) comPI.open(SerialPortTest.class.getName(), 400);
return com;
}
}
截图记录

3.解决办法
问题根源:古老的rxtxSerial.dll引起的
借助空闲串口规避缺陷
- 先打开一个串口,比如COM1,程序启动时打开COM1,程序关闭后关闭COM1,期间其他串口打开关闭都不会引起崩溃了。这个COM1口是要空闲的。
使用rxtx的纯Java实现库purejavacomm
代码不变,引用的库改一下即可。
- 使用方法:和rxtx和javax.comm没有差别,就是导入的库不同
- 说明:Sun的JavaComm已被放弃,而RXTX也有自己的问题,详见
2018-10-18 15:43

浙公网安备 33010602011771号