私は簡単なチャットGUIを作成しており、サーバーとGUIクライアントの両方を作成しており、クライアントGUIからサーバーにメッセージを送信できます。2つの異なるイベントを処理する方法
私の問題は、フレーム上のサーバーからメッセージを受信することです。 無限ループを使用すると、フレームがロックされます。 JTextArea
にメッセージを表示するには、どのように分割するべきか分かりません。 私の質問は: サーバーから「送信」と「受信」情報を処理するフレームを分割する方法はありますか?
私のGUIは、JTextField
,JTextArea
およびJButton
で構成されています。
プレスJButton
JTextField
からのテキストがでサーバーに送信された場合:
String u = jTextField.getText();
out.writeUTF(u);
しかし、私はJTextArea
取得することで情報を今後のためにすべての時間を減らすために何をすべきか分からない:
msg = in.readUTF();
jta.append(msg + "\n");
//
私はスレッドevrythingは思えてきたので、スレッドは、GUIクラスでクラスやコンポーネントであるべきうまくいきますが、マッサージはjTextField
にありません。私は、同じファイルで行ったサーバーのように糸を作ったが、動作していない:
class bacgroundTask extends Thread{
static String msg;
static JTextArea jta;
static DataInputStream in;
public void run(){
while(true){
try{
msg = in.readUTF();
jta.append(msg + "\n");
}
catch(IOException ioe){}}}}
//
こんにちは、それは私が実行されたとき、私はできませんinvokelater方法が、フレームfrezzeを使用しようと再び私ですボタンを押すか、jtextfield
にテキストを入力してください。どんな体でも私のことをもう少し詳しく説明でき、私の場合は正しいですか?
私はstetmentの有無にかかわらず試しました。