我有一个java项目,它使用comport进行通信。并使用comport 1和comport 2数字。但是我的linux系统不能有com端口。我想运行代码并监听comport上发送的数据。
但当我运行代码时,它会抛出错误。我该如何追求。
我的comport实用程序代码是这样的

import com.fazecast.jSerialComm.SerialPort;

public class ComPortUtil {
private static SerialPort comPort;
private static SerialPort relayPort;

static {
    SerialPort[] serialPorts = SerialPort.getCommPorts();
    comPort = serialPorts[3];
    comPort.setBaudRate(115200);
    comPort.setParity(SerialPort.NO_PARITY);
    comPort.setNumDataBits(8);
    comPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
    relayPort = serialPorts[1];
    relayPort.setBaudRate(115200);
    relayPort.setParity(SerialPort.NO_PARITY);
    relayPort.setNumDataBits(8);
    relayPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
}

public static SerialPort getPOSPort() {
    return comPort;
}

public static SerialPort getRelayPort() {
    return relayPort;
}

}

最佳答案

我也遇到过类似的问题,开发了一个需要读取串行端口的软件。
我的工作站没有串行(它是一个虚拟机),所以我使用com0com创建虚拟串行端口。
它可以创建两个交叉链接的虚拟com端口(一个端口的输入是另一个端口的输出)。
我配置了一个供我的应用程序使用,并创建了一个小程序,使用另一个程序发送用于测试应用程序的输入。
这是一个在虚拟COM端口上编写测试的示例,而应用程序正在侦听其交联COM。

static SerialPort commPort = null;

@BeforeClass
public static void setUpClass(){
    commPort = SerialPort.getCommPort("CNCB0");
    commPort.openPort();
}


@Test
public void showControl(){
    shortWait();
    send(commPort, "S421803171");
    // ...
    // A delay of few millis ...
    shortWait();
    String value = lookup("#fldFicheBarcode").queryAs(TextField.class).getText();
    // ...
    assertEquals("S421803171", value);
}

protected static void send(final SerialPort commPort, final String _txt) {
    ForkJoinPool.commonPool().submit(()->{
        final String txt = !_txt.endsWith(CRLF)?_txt+CRLF:_txt;
        byte[] bytes = txt.getBytes();
        int writeBytes = commPort.writeBytes(bytes, bytes.length);
        logger.debug("Written bytes:"+writeBytes);
    }).join();
}

07-26 06:17