用comm读串口数据代码如下int count = 0;
receivejTextArea.append("re>");
while ( count == 0) {
count = inputStream.available();
if( count > 0){
byte readBuffer[] = new byte[count];
inputStream.read(readBuffer);
String receiveString = new String(readBuffer);
receivejTextArea.append(receiveString+"\r\n");// 打印串口数据
}
}
当串口发字符串“PLEASE ENTER SERVEN CHARS:”时,显示是
re>PLEASE  
re>ENTER SE
re>RVEN CHARS:我读数据的代码有问题么,为什么同一次发送的数据,读出来却是分段的??但是有时候却能整段的读完,不明白原因
请大家帮忙

解决方案 »

  1.   

    应该是读数据的时候有问题~
    前段时间还用了这个 javax.comm
    我帮你找找我原来怎么用的
      

  2.   


    public void serialEvent(SerialPortEvent e){
         StringBuffer stringBuffer= new StringBuffer();
         int readData= 0;
         switch(e.getEventType()){
         case SerialPortEvent.DATA_AVAILABLE:
         while(readData!= -1){
         try{
         readData= inStream.read();
         if(readData== -1){
         break;
         }
        
         String value;  //转换数据显示,用十六进制输出
         if(readData>= 16){
         value= Integer.toHexString(readData).toUpperCase();
         }else if(readData>= 0){
         value= "0".concat(Integer.toHexString(readData).toUpperCase());
         }else{
         value= Integer.toHexString(readData).substring(6).toUpperCase(); //当数据小于0时转换成十六进制显示时取后两位数据位,忽略符号位
         }
        
         stringBuffer.append(value+ " "); //将数据转换为十六进制显示
         }catch(IOException ex){
         ex.printStackTrace();
         }
         }

         /**
          * 以下代码构造接收的数据字符串,并在输出区域显示返回信息
          */
         for(int i=101;i<stringBuffer.length();i+=3*34){ //数据过长时加入换行符
         stringBuffer.setCharAt(i, '\n');  //通过在指定位置插入换行符实现自动换行功能
         }
         String data= new String(stringBuffer);
         String infoStr= new Date()+ "(串口测试)\n"+ data+ "\n\n";
         System.out.println(infoStr);
         this.commFrame.getRecvArea().append(infoStr); //将接收到的数据以十六进制显示在文本区域
    //     case SerialPortEvent.BI:
    //     System.err.println("Break Interrupted...!");
    //     String info= new Date()+ "\n    "+ "Break Interrupted...!"+ "\n\n";
    //     this.commFrame.getRecvArea().append(info);
         }
        }
      

  3.   

    谢谢BatiTan 
    你的inStream是DataInputStream类型吧?调用一次inStream.read();是读取一个整型数据(四个字节)么?我使用的是InputStream,调用inputStream.available()得到当前串口缓冲区内的字节数,然后new一个相应长度的字节读取进去。
    给串口发送一段字符串时,比如 PLEASE ENTER SERVEN CHARS:
    我觉得应该是inputStream.available()返回26(有26个字母),然后就可以一次读取出来但是实际情况是把上面字符分成了三段,每次我只能读一段,一共发了三次DATA_AVAILABLE消息为什么不能一次读取出来呢