2012-02-28 6 views
0

java-simple-serial-connector APIを使用してアプリケーションを開発し、 を読み取り、シリアルポートに書き込みます。私はデータバイト を読み込み、それらをグローバル文字列変数(sReader)に割り当てるときに問題に直面しています。 sReaderは文字列全体を取得せず、その長さは毎回ランダムです。文字列sBufferをOutput(Output.append)に追加すると、文字列全体が常に表示されるため、すべてのバイトを受け取っていると確信しています。私はあなたのコードのいくつかの他の部分からsReaderにアクセスしたいと仮定していjava - グローバル文字列変数にinvokeAndWaitの値を割り当てることができません

public class SerialPortTest extends javax.swing.JFrame { 

    private String sReader = ""; 
    private JTextArea outputTextArea; 
    private JLabel outputLabel; 

    private class Reader implements SerialPortEventListener { 

     private String sBuffer = ""; 

     @Override 
     public void serialEvent(SerialPortEvent spe) { 

      if (spe.isRXCHAR() || spe.isRXFLAG()) { 

       if (spe.getEventValue() > 0) { 

        try { 

         //Read chars from buffer 
         byte[] bBuffer = serialPort.readBytes(spe.getEventValue()); 
         sBuffer = new String(bBuffer); 

         SwingUtilities.invokeAndWait(
           new Runnable() { 

            @Override 
            public void run() { 

             sReader = sBuffer;//does not assign full string 

             outputLabel.setText(sBuffer);//does not set full string 

             outputTextArea.setText(sBuffer);//does not set full string 

             outputTextArea.append(sBuffer);//This works! Why the above don't work? 

            } 
           }); 

        } catch (SerialPortException | InterruptedException | InvocationTargetException ex) { 
        } 
       } 
      } 
     } 
    } 
} 
+1

「Output」はインスタンス変数であり、慣例として小文字で始まることに注意してください。 – DNA

+0

私はすぐに例を入力していたので事故でした。 – jadrijan

答えて

1

:以下の私のサンプルコードを見てみてください。その場合は、sReaderをvolatileにし、Runnableを作成する前にそれを割り当ててください。また、sBufferがRunnableで使用するStringを作成するためにのみ使用され、最終的なローカル変数にすることを検討してください。

private volatile String sReader = ""; 
... 

final String sBuffer = new String(bBuffer); 
sReader = sBuffer; 

SwingUtilities.invokeAndWait(
... 
+0

これは正確に私がsReader文字列を必要とする理由です...あなたのアドバイスを使用して残念ながら私は問題を解決しませんでした:( – jadrijan

+1

次に、あなたが追加するStringBuilderである必要があります。 – Clint

+0

優秀な点、私はそれを試みます。 – jadrijan

関連する問題