将数据保存在阵列上

时间:2014-06-03 15:00:47

标签: java serial-port embedded rxtx

大家好,这是我在这个网站上的第一个主题;抱歉我的英语不好我不是母语为英语的人

所以我想将从嵌入式卡收到的数据保存到数组中

这是我的功能

public void serialEvent(SerialPortEvent evt) {

    if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
    {

       System.out.println("Data available event received");
        try
        {
            byte singleData = (byte)input.read();

            if (singleData >= Debut_caracter) 
            {     

              System.out.println("Reçu : "+singleData); 
              logText =new String(new byte[] {singleData});
              window.txtLog.append(logText);

              System.out.println("le LogText est : "+logText+"\n");    
            }   

              else { 
                window.txtLog.append(" ");    
                   }
             if (singleData < 0) 
            {

                window.txtLog.append("\n");

            }
        }

        catch (Exception e)
        {
            logText = "Failed to read data. (" + e.toString() + ")";
            window.txtLog.setForeground(Color.red);
            window.txtLog.append(logText + "\n");
        }
    }
   // waiting(1);

}

我从我的卡片数据中收到了这样的信息:


le LogText est:R

收到数据可用事件 Reçu:70 le LogText est:F

收到数据可用事件 Reçu:69 le LogText est:E

收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 收到数据可用事件 Reçu:83 le LogText est:S

收到数据可用事件 Reçu:84 le LogText est:T

收到数据可用事件 Reçu:80 le LogText est:P

收到数据可用事件 Reçu:48 le LogText est:0

收到数据可用事件 Reçu:49 le LogText est:1

收到数据可用事件 Reçu:54 le LogText est:6

收到数据可用事件 Reçu:54 le LogText est:6

收到数据可用事件 Reçu:48 le LogText est:0

收到数据可用事件 Reçu:50 le LogText est:2

收到数据可用事件 收到数据可用事件 收到数据可用事件


我只想显示“STP029393”

2 个答案:

答案 0 :(得分:0)

您需要建立字节来自设备的协议。看起来你正在使用Debut_caracter常量做类似的事情。特别是,您需要建立一种方法来指示要显示的字符串的结尾(可能带有'\ n'字符?)

您现在拥有的代码会在收到时立即对每个字符执行某些操作。您需要临时存储字符,然后在需要时打印它们。

基本思想是使用在serialEvent()方法范围之外声明的StringBuffer对象。

  1. 收到第一个字符后,清除缓冲区并将字符附加到其中。
  2. 每个后续字符都附加到StringBuffer。
  3. 收到最后一个字符后,将其附加到缓冲区并打印出缓冲区。

答案 1 :(得分:0)

好的我做这样的事情

public void serialEvent(SerialPortEvent evt) {

    if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE)
    {

       //System.out.println("Data available event received");
        try
        {
            byte singleData = (byte)input.read();

            if (singleData != NEW_LINE_ASCII)
            {     
                System.out.println("Reçu :" +singleData);
              logText =new String(new byte[] {singleData});
              stringBuffer.append(logText);

            }   
            if (singleData < 0) 
              { 

                System.out.println("le LogText est : "+stringBuffer+"\n");

                window.txtLog.append("\n"); 
                stringBuffer.setLength(0);
  //              waiting(1);
              }
          }

        catch (Exception e)
        {
            logText = "Failed to read data. (" + e.toString() + ")";
            window.txtLog.setForeground(Color.red);
            window.txtLog.append(logText + "\n");
        }
    }
}

它有效,但我不知道它是否是最佳的。 你的意见好吗?