2017-04-18 7 views
0

COMポートから何かを読み取る際に問題があります。私はJavaFXアプリケーションでtxrxライブラリを使用しています。ここではそれが読んでいるものを表示するコードです:InputStreamからの全行を表示

public void serialEvent(SerialPortEvent evt) { 
     String bytesin = null; 
     String fullLine = " "; 


     if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) 
     { 
      try 
      { 
       byte singleData = (byte)input.read(); 

       if (singleData != CR_ASCII) 
       { 
        bytesin = new String(new byte[] {singleData}); 
        fullLine = fullLine+bytesin; 
        System.out.println(fullLine); 
       } 
       else if (singleData == CR_ASCII) 
       { 
        System.out.println("CR detected!"); 
       } 
       else 
       { 
        statusLabel.setText("Read!"); 
       } 
       } 
      catch (Exception e) 
      { 
       statusLabel.setText("Failed to read data. (" + e.toString() + ")"); 
       System.out.println("Failed to read data. (" + e.toString() + ")"); 

      } 
     } 


} 

は==そのコードの問題点は、行ごとに単一の文字のすべてを表示することです。しかし、私のコードの出力はこれを与え

**T-Pod-1Ch**(Char 13)(Char 10) 

* 
* 
T 
- 
P 
o 
d 
- 
1 
C 
h 
* 
* 
CR detected! 


* 
* 
T 
- 
P 
o 
d 
- 
1 
C 
h 
* 
* 
CR detected! 
+0

なぜ他のことをしますか? 'fullLine'を空白文字に設定した後、ストリームから単一の文字を読み込み、' System.out.println(fullLine) 'を実行します。テキスト全体を読むには、 'BufferedReader'を作成し、' readLine() 'を呼び出してみてください。 –

答えて

0

ストリームから1行のテキストを読み取る通常の方法は、BufferedReaderreadLine()メソッドを使用することです。あなたが行うことができない何らかの理由がある:

BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 

// ... 

String fullLine = reader.readLine(); 
System.out.println(fullLine); 

代わりに(車輪を再発明し、本質的にと)時点で、単一のバイトを読み取ろうとするの。

+0

ありがとう、私はそれについて知りませんでした。私はオンラインで読んだ例をいくつか取り上げていました。 –

0

(byte)input.read()は、シングルバイトとSystem.out.println(fullLine)版画この文字を読み 私のUSBデバイスは、次のテキストを(文字数はASCIIではない文字である)を出力していますそれ以降の新しい行。したがって、コードは機能します。代わりにSystem.out.print(fullLine)を使用してください。

関連する問題