【问题标题】:Com ports are not detected with jSSC使用 jSSC 未检测到 Com 端口
【发布时间】:2018-02-11 13:59:09
【问题描述】:

我正在尝试借助我的 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 是空的。

请您给我一些建议。

【问题讨论】:

    标签: java port jssc


    【解决方案1】:

    我在 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 为空”。也许与设备驱动程序有关。他应该检查那里。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2016-05-15
        • 2012-10-03
        • 2016-01-05
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        相关资源
        最近更新 更多