我在读取串行端口时遇到问题。当程序到达CommPortIdentifier.getPortIdentifier()时,它停留了将近5分钟。如我所见,延迟可能是由于扫描系统中的所有端口所致。那么如何避免这5分钟的延迟呢?

最佳答案

如何扫描可用端口?

例如,以下代码将返回可用串行端口的字符串列表:

public List<String> getAvailablePorts() {

    List<String> list = new ArrayList<String>();

    Enumeration portList = CommPortIdentifier.getPortIdentifiers();

    while (portList.hasMoreElements()) {
        CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
            list.add(portId.getName());
        }
    }

    return list;
}


编辑:由于实际的解决方案是在注释中挖掘的,所以我在这里添加它:

看起来commPortIdentifier.getPortIdentifier(portName)确实确实在某些情况下重新扫描了端口。快速的解决方法是通过gnu.io.rxtx.SerialPorts系统属性手动设置固定端口列表。

10-05 18:10