1

我正在尝试借助我的 java 应用程序中的 Com 端口来实现数据传输。首先,我决定像这样创建 SerialPort 对象。

 SerialPort serialPort = new SerialPort("COM1");

 try {
        serialPort.openPort();
 } catch (SerialPortException ex) {
        ex.printStackTrace();
 }

但是有一个 jssc.SerialPortException: Port name - COM1; 方法名称 - openPort(); 异常类型 - 未找到端口。

然后我试图确定我有哪些 com 端口:

 String[] portNames = SerialPortList.getPortNames();
    for (int i = 0; i < portNames.length; i++) {
        System.out.println(portNames[i]);
    }

结果很糟糕:portNames 是空的。

请你给我一些建议。

4

2 回答 2

0

我在 Windows 中检查了这段代码,没问题:我的 USB-to-COM 适配器在系统中变成了 COM4

import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class Main {
    public static void main(String[] args) {
        SerialPort serialPort;
        serialPort = new SerialPort("COM4");

        try {
            serialPort.openPort();
        } catch (SerialPortException ex) {
            ex.printStackTrace();
        }

        String[] portNames = SerialPortList.getPortNames();
        for (int i = 0; i < portNames.length; i++) {
            System.out.println(portNames[i]);
        }
    }
}

我也去设备管理器检查COM端口。同样,如果主题启动器的“portNames 为空”。也许与设备驱动程序有关。他应该在那里检查。

于 2017-11-15T16:31:47.370 回答
0

有多种方法可以处理这个问题。

  1. 应用程序启动时,循环查找可用的 COM 端口,而不是仅在找到时才打开端口。您还可以添加延迟,因为 Windows 需要一些时间来检测和激活 COM 端口以供使用。当我们插入 USB-UART 时,Windows 会加载驱动程序并分配一个 COM 端口号。这意味着如果我们每次都将相同的模块插入相同的物理端口,您将获得 COM4。所以不用担心。
  2. 如果您想制作一些更强大的解决方案,请编写自己的解决方案并使用一些提供 USB-UART 热插拔检测的库。因此,当我们插入 USB-UART 模块时,该库会告诉我们分配了哪个端口号,然后我们从应用程序中打开它。我知道的一个这样的库是SerialPundit
于 2017-12-04T06:21:52.563 回答