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

posted @ 2021-02-18 11:26  ioufev  阅读(824)  评论(0)    收藏  举报