【问题标题】:jSerialComm: dynamically detect available serial ports (hotplug device)jSerialComm:动态检测可用串口(热插拔设备)
【发布时间】:2021-10-25 07:18:24
【问题描述】:
我创建了一个 Java GUI,它在下拉菜单中列出了所有串行端口,用户可以从中选择正确的端口并单击连接。然后建立与 Arduino 的连接,用户可以执行一些操作。我使用 Fazecast JSerialComm 获取可用端口:
SerialPort[] ports = SerialPort.getCommPorts();
我抓取端口并将结果放入下拉列表中。这可以完美地工作,但只有在启动我的 Java GUI 之前将 Arduino 插入 Mac 时。有没有办法在 Java 中检测热插拔设备?我已经考虑过定期(每秒钟左右)获取 com 端口,但对我来说这似乎是一个非常优雅的解决方案。
【问题讨论】:
标签:
java
serial-port
hotplugging
【解决方案1】:
更新:
我发现另一个用户回答了这个问题:
串行通信管理器具有用于动态查找串行端口名称(如 COMxx)的 API。只需连接您的 USB-USRT IC,SCM 库就会告诉您它的设备节点。只是谷歌的串行通信管理器。它托管在 GitHub 上。
src
您可以通过在尝试打开端口后检查端口是否打开来做到这一点:
SerialPort[] serialPorts = SerialPort.getCommPorts();
SerialPort liveSerialPort = null;
for (SerialPort p: serialPorts) {
p.openPort();
if (p.isOpen()) {
liveSerialPort = p;
System.out.println("HERE opened port = " + liveSerialPort.getSystemPortName());
break;
}
}