以下是我的代码中的部分:
  就是监听的问题
public void serialEvent(SerialPortEvent event) {
        switch(event.getEventType()) {
       case SerialPortEvent.OUTPUT_BUFFER_EMPTY:break;
       case SerialPortEvent.DATA_AVAILABLE:
          sb=new StringBuffer();
          StringBuffer sb2=new StringBuffer();
          String str=new String();
          byte[] readBuffer=new byte[2];
          int i=0;    
          mystr="";//这是全局变量
          try {
               while (inputStream.available()>0) {
                   i=inputStream.read(readBuffer);  //读取数据
                   if(i==-1)
                      {
                          inputStream.close();
                          break;
                      }
                   else 
                   {
                        mystr=mystr+ new String(readBuffer);  
                   }
              }
                 readinfo2(mystr);//这是一个方法,自己写的,用于输出
                mystr="";//清空
              
          }
         catch (IOException e) {   }
         finally
         {
            inputStream.close(); //关闭串口
         }
                   break;
        }为何输出的代码会弄出错

解决方案 »

  1.   

    一般串口通信都是全双工的,可以一边向里写,一边请取输出的。
    http://www.programmerstudy.com/programme/java/20084/97.html
      

  2.   

    第一次可以读取,以后的位置不对,应该是流取到使用后没有关闭,
                        try   { 
                                  while   (inputStream.available()> 0)   { 
                                          i=inputStream.read(readBuffer);     //读取数据 
                                          if(i==-1) 
                                                { 
                                                        inputStream.close(); 
                                                        break; 
                                                } 
                                          else   
                                          { 
                                                    mystr=mystr+   new   String(readBuffer);     
                                          } 
                                } 
                                      readinfo2(mystr);//这是一个方法,自己写的,用于输出 
                                    mystr= " ";//清空 
                                
                        } 
                      catch   (IOException   e)   {       } 
                      finally 
                      { 
                            inputStream.close();   //关闭串口 
    这个里面关闭了两次也有问题
      

  3.   

    if(i==-1)
        inputStream.close();
          break;
    }
    else  
    {
      mystr=mystr+   new   String(readBuffer);    

    这个判断是没有必要,且错误的。如果已经读取完毕,while   (inputStream.available()> 0)就可以告诉你了。另外,即使有了上面的判断,也不应该执行inputStream.close();因为后面finally里,无论怎样都要被执行的。