我在读取串行端口时遇到问题。当程序到达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系统属性手动设置固定端口列表。