写的上位机,涉及到串口通讯,用的是javacommon20-win32串口通讯包。遇到的问题很简单,但是我不知道我哪里有问题。
      正常启动程序时,程序能够得到正确的端口数目及端口号,如图,但是当我使得一些串口无效的、再点刷新的时候,端口还是之前的那几个,没有将新增或者减少的端口号更新到choice控件的列表中。在初始化程序时,调用了setPorts()方法,得到正确端口数目极其端口号。setPorts方法如下:public void setPorts(){
            Enumeration en = null;
            en = CommPortIdentifier.getPortIdentifiers();//得到所有的common端口标识
            String str ="";
            CommPortIdentifier portId=null;
            int count=0; //累计串口数量
            while (en.hasMoreElements())//遍历装有串口标识的枚举en 如果是rs232的,得到名字 拼接成string 以,分隔
            {
                 portId = (CommPortIdentifier) en.nextElement();
                   /*如果端口类型是串口,则打印出其端口信息*/
                if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
                {     count++;
                      System.out.println(portId.getName());
                      str=str+","+(portId.getName());
                }
            }
            //System.out.println(str);
            if(count==0){ //无可用串口
                JOptionPane.showMessageDialog(null, "无可用端口,请检查!");
                System.exit(0);
            }else{ //有可用串口,添加到Choice列表中去
               
                str=str.substring(1, str.length());
                System.out.println(str);
                String[] comNames=str.split(",");//Port 名字数组
                
              
                for(int i=0;i<comNames.length;i++){//添加到java.awt.Choice列表中去
                       choice_port.add(comNames[i]);
                }
            }
 }在点击刷新按钮后的actionPerformed()方法如下:   private void refreshPortActionPerformed(java.awt.event.ActionEvent evt)   {      
         choice_port.removeAll();
         setPorts(); 
           
}
在增减端口后,点击端口,choice控件列表不能得到正确更新!求解释!谢谢了  串口

解决方案 »

  1.   

    楼主的代码只有choice_port.add(comNames[i]);
    往choice里面添加端口。
    那我问一下,如果刷新了之后之前添加到choice里面的端口是会全部消失还是继续存在?
    如果继续存在的话就说的通了,楼主没有删,只有加。
    如果全部消失的话,那我暂时也没看到哪里有错。。
    多加debug测试,要不找错很难的
      

  2.   

    初始加是不需要清空choice的,刷新的时候了我先调用了removeAll()方法,去除所有端口了,之后才添加的我一直感觉自己写的么问题奇怪了不过谢谢了