从RXTX添加和获取Comm端口

时间:2015-12-22 19:11:46

标签: java iterator hashmap

我目前正在开发一个需要与commport上连接的设备进行通信的项目。我在下面有一个函数搜索串行端口,将它们添加到散列映射然后返回散列映射。我注意到一个问题,每当我尝试从HashMap中获取某些东西时,它会给出java.lang.nullPointerException我是否试图从地图中错误地获取端口?如果我需要发布更多代码,请告诉我。

private Enumeration ports = null;
public HashMap<String, CommPortIdentifier> searchForPorts() {
        ports = CommPortIdentifier.getPortIdentifiers();
        while (ports.hasMoreElements()) {
            CommPortIdentifier curPort = (CommPortIdentifier) ports.nextElement();
            if (curPort.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                System.out.println("Adding: " + curPort.getName() + "-" + curPort);  
                portMap.put(curPort.getName(), curPort);
                System.out.println(portMap.get(curPort.getName())); //works: prints out gnu.io.CommPortIdentifier@9f116cc
            }
        }
        log.fine("Successfully looked for ports");
        Iterator it = portMap.entrySet().iterator();
        String s="";
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry) it.next();
            s = pair.getKey().toString();
            System.out.println(s); //prints out COM24 like it should
            it.remove();
        }
        System.out.println(portMap.get(s)); //Prints out null??
        return portMap;
    }

此代码的部分内容取自here

1 个答案:

答案 0 :(得分:1)

您使用it.remove()删除地图中的元素,如javadoc中所述:从底层集合中删除此迭代器返回的最后一个元素

要使用迭代器访问下一个元素,您只需使用it.next()(假设有剩余元素)。

另一个解决方案是使用这样的foreach循环:

for(Map.Entry pair : portMap.entrySet()){
    s = pair.getKey().toString();
    System.out.println(s);
}