1

我在使用 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

任何人都可以帮助我/建议在投票中获得动态响应。

4

2 回答 2

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());

        }
    }
}

编辑 :

我刚刚使用 USB 上的 BlackBerry 在 Windows XP SP3 上测试了该程序。当我启动程序时,我看到了正常的 COM1 和 BlackBerry 的两个 COM 端口。断开 BlackBerry 后,端口将保留在设备管理器中。如果我手动删除它们,它们会在程序中消失(无需重新启动)。

于 2013-03-14T13:45:06.170 回答
0

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

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

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

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

祝你好运!

于 2016-04-04T17:11:46.347 回答