comm.jar通信串行端口java
我在使用comm.jar时遇到问题
问题是我连接了设备,并使用此代码在池中启动了应用程序
public static void main(String[] args) {
Enumeration portList;
CommPortIdentifier portId = null;
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
System.out.println("port::" + portId.getName());
}
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(JavaComPortFinding.class.getName()).log(Level.SEVERE, null, ex);
}
main(args);
}
}
输出:
port::COM1
port::COM10
在一次轮询之后,我弹出了设备。我仍然得到了如下回应:
port::COM1
port::COM10
有人能帮我解决/建议在投票中获得动态响应吗
# 1 楼答案
您可以尝试类似的方法,因为每次都应该重新创建CommPortIdentifier
编辑:
我刚刚在Windows XP SP3上用黑莓手机在usb上测试了这个程序。当我启动程序时,我看到了黑莓手机的正常COM1和两个COM端口。一旦我断开黑莓手机的连接,端口就留在设备管理器中。如果我手动删除它们,它们会在程序中消失(无需重新启动)
# 2 楼答案
https://community.oracle.com/thread/2063873?start=0&tstart=0
在为类似问题找到解决方案时,我发现上述资源非常有价值
这里的主要问题是
CommPortIdentifier
中的静态块只加载一次,并将端口信息缓存在字段变量portList
中。当您调用getPortIdentifiers()
方法时,它将从portList
返回在初始加载期间检测到的端口解决方法是在
CommPortIdentifier
类中重新加载静态块,然后调用getPortIdentifiers()
,这将重新加载驱动程序并为您提供COM端口的更新列表(这是在引用的链接中使用Java反射API完成的)祝你好运