有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

有人能帮我解决/建议在投票中获得动态响应吗


共 (2) 个答案

  1. # 1 楼答案

    您可以尝试类似的方法,因为每次都应该重新创建CommPortIdentifier

    class TestProgram
    {
        public static void main(String[] args)
        {
            while(true)
            {
                try
                {
                    Thread.sleep(2000);
                }
                catch(InterruptedException ex)
                {
                    Logger.getLogger(TestProgram.class.getName()).log(Level.SEVERE, null, ex);
                }
    
                scanPorts();
            }
        }
    
        private static void scanPorts()
        {
            Enumeration portList;
            CommPortIdentifier portId = null;
            portList = CommPortIdentifier.getPortIdentifiers();
    
            while (portList.hasMoreElements())
            {
                portId = (CommPortIdentifier) portList.nextElement();
                System.out.println("port::" + portId.getName());
    
            }
        }
    }
    

    编辑:

    我刚刚在Windows XP SP3上用黑莓手机在usb上测试了这个程序。当我启动程序时,我看到了黑莓手机的正常COM1和两个COM端口。一旦我断开黑莓手机的连接,端口就留在设备管理器中。如果我手动删除它们,它们会在程序中消失(无需重新启动)

  2. # 2 楼答案

    https://community.oracle.com/thread/2063873?start=0&tstart=0

    在为类似问题找到解决方案时,我发现上述资源非常有价值

    这里的主要问题是CommPortIdentifier中的静态块只加载一次,并将端口信息缓存在字段变量portList中。当您调用getPortIdentifiers()方法时,它将从portList返回在初始加载期间检测到的端口

    解决方法是在CommPortIdentifier类中重新加载静态块,然后调用getPortIdentifiers(),这将重新加载驱动程序并为您提供COM端口的更新列表(这是在引用的链接中使用Java反射API完成的)

    祝你好运