做串口发送和接受数据是遇到了问题,希望各位前辈帮忙
代码片断
 public void serialEvent(SerialPortEvent event)//实现串口监听中的方法
    {
        switch(event.getEventType())
        {
            case SerialPortEvent.BI:
            case SerialPortEvent.OE:
            case SerialPortEvent.FE:
            case SerialPortEvent.PE:
            case SerialPortEvent.CD:
            case SerialPortEvent.CTS:
            case SerialPortEvent.DSR:
            case SerialPortEvent.RI:
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                break;
            case SerialPortEvent.DATA_AVAILABLE:     
                byte[] readBuffer=new byte[1];
                System.out.println("为什么只执行一遍?");
                try 
                { 
                     while(inputStream.available()!=-1)
                     {  
                        int numBytes=inputStream.read(readBuffer);  
                        area.append(new String(readBuffer));  
                     } 
                     System.out.println("为什么不执行这一句呢?");
                }
                catch(Exception e){}     
            break;
        }
     } 

解决方案 »

  1.   

    byte[] readBuffer=new byte[1];//读串口数据,每次读的数据大小
    while(inputStream.available()!=-1)//开始不停的接受设备上发过来的数据
      

  2.   

    一直在while循环里面呢 因为一直有数据过来
      

  3.   

    不行啊,如果每次读的数据太大,数据长度不够时,就会加空格
    while循环就是完了它也不执行后面的代码
      

  4.   

    看看我的,这个串口接收以TAB开头,ENTER结尾的字符,由于buffer小了接收不完,所以buffer要大,但又会加入空的东西,也就是加上ascii为0的东西,所以要去掉这些东西,你看看改一下下面的
       public void readData()
        {
            readBuffer = new byte[50];
            try
            {
                while (in.available() > 0)
                {
                    in.read(readBuffer);                            }
                if (!enter)
                {
                    deleteControlChar(readBuffer);
                    enter = false;
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }    /**
         * @param readBuffer
         * @return void
         */
        private void deleteControlChar(byte[] readBuffer)
        {
            String buff = new String(readBuffer);
            //boolean tab = false;
            Calendar cal = Calendar.getInstance();
            String time = cal.get(Calendar.HOUR_OF_DAY) + ":"
                    + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND);        for (int i = 0; i < buff.length(); i++)
            {
                /*System.out.println("letter: " + buff.charAt(i) + " -> "
                 + (int) buff.charAt(i));
                 System.out.print("tab: ");
                 System.out.println(tab == true);
                 System.out.print("enter: ");
                 System.out.println(enter == true);*/
                if ((int) buff.charAt(i) == 9 && !enter)
                {
                    tab = true;
                }            if (tab && (int) buff.charAt(i) != 0 && (int) buff.charAt(i) != 9)
                {
                    if ((int) buff.charAt(i) == 13)
                    {
                        tab = false;
                        enter = true;
                        rev = strBuff.toString();
                        String revCS = owner.getCheckSum(rev.substring(0, rev
                                .length() - 1));
                        if (!rev.equals("000X123456789"))
                        {
                            if (revCS.equals(rev))
                            {
                                received++;
                                //System.out.println("received=" + received);
                                System.out.println(time + " received: " + rev);                            setReceived();
                                checkType(rev);
                            }
                            else
                            {
                                System.out.println(time + " received: " + rev);
                                System.out.println("but received should be: "
                                        + revCS);
                                //send also
                                /*received++;
                                 setReceived();
                                 checkType(rev);*/
                            }
                        }
                        else
                        {
                            System.out.println(time + " received: " + rev);
                        }                    strBuff.delete(0, strBuff.length());
                        break;
                    }
                    strBuff.append(buff.charAt(i));
                }
            }
        }