2017-11-28 6 views
0

私はRS-232シリアル経由で取得したデータを区切るプログラムを作成しています。プログラムがデータを受信するために必要な3つのマシンと、3つのCOMポートがあります。Java JTextAreaが更新されていません

プログラムインターフェイスのJTextAreaを更新して、プログラムが現在リッスンしているポートについてユーザーに通知するコードを作成しましたが、テキストエリアはコードに基づいて更新されず空白のままです。コードは次のような次のとおりです。

public String ComStat; 

public void comDefine() 
{ 
    if (Serial.currPortId.getName() == null) { 
     ComStat = "NONE"; 
    } else if (Serial.currPortId.getName() == "COM1") { 
     ComStat = "COM1"; 
    } else if (Serial.currPortId.getName() == "COM2") { 
     ComStat = "COM2"; 
    } else if (Serial.currPortId.getName() == "COM3") { 
     ComStat = "COM3"; 
    } else { 
     ComStat = "NONE"; 
    } 
} 

とJTextAreaのために、私たちは持っている:

private JPanel createPanel(String text) { 

    JPanel panel = new JPanel(); 
    JLabel lbl = new JLabel(text); 
    panel.add(lbl); 
    listenState = new JTextArea(ComStat); 
    listenState.setBorder(new BevelBorder(BevelBorder.LOWERED)); 
    listenState.setLineWrap(true); 
    listenState.setWrapStyleWord(true); 
    add(listenState, BorderLayout.SOUTH); 
    panel.add(listenState); 

    return panel; 
} 

実際に、それは次のようになりリッスンのポートとどのポートでリッスンしていますかどうかを表示するようにJTextAreaのを得る上の任意のヘルプとても有難い。私は実際に問題を抱えている領域の読み込みを容易にするためにコードの大部分を切り捨てました。

+0

あなたのテキスト領域を更新するコードはありません。これはそれを作成するコードです。 COMポートから読み込むコードはなく、バイナリデータをテキストエリアにテキストを付加するコードやコードに変換するコードはありません。 –

+0

listenState.setText(ComStat);を使用して[Javaの文字列を比較するにはどうすればいいですか?](https://stackoverflow.com/q/513832/8097737) – devpuh

答えて

0

jTextArea_variable.setText(string);に文字列変数を使用します。

listenState.setText(ComStat); 
+0

もご覧ください。実際にプログラムを実行しても何も変更されません。テキストは残念ながら空白のままです。 –

+0

私は、それ自体を見て、問題自体が "comDefine"メソッドにあると思います。実際に呼び出されることはありませんので、 "ComState"の値は変更されません。 –

+0

私は問題を解決しました!解決策は、if文を使用してcomポートコードを直接処理することでした。 –

0

あなたは、テキストエリアにコピー変数の現在の値を

new JTextArea(ComStat) 

のようなコードを持っている場合。将来変数を変更すると、JTextAreaには影響しません。変数を変更するたびにUIを更新するには、listenState.setText(ComStat);に電話する必要があります。テキストを追加するにはappend(String)を使用してください。

注:UIスレッドでこれを呼び出す必要があります。複数のスレッドを使用してシリアルポートを読み取る場合は、上記の行をSwingUtilities.invokeLater()にラップする必要があります。 https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable)

関連する問題