我的Reader類用於在服務器發送服務器消息時顯示服務器消息。當直接打印到命令行時,此代碼完美工作,我收到服務器發送的任何消息。但是,JTextArea只顯示其他每一行。我不確定這裏要做什麼。我讀了一些關於InvokeLater的內容,但我不確定這是否是使用它的正確情況。從其他類中追加到JTextArea
此外,當單擊連接按鈕時,線程從GUI類中啓動。
public class Reader implements Runnable {
public static Socket s = null;
public static JTextArea TextArea;
public static BufferedReader reader = null;
/*Takes in a Socket. Sets up a input stream.
*
*/
public Reader(Socket sIn, JTextArea display) {
TextArea=display;
s = sIn;
try {
reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (IOException ex) {
System.out.println("Error in constructor Reader: " + ex);
}
}
public void checker() {
try {
/*Sits and waits for a Server Response*/
while (!reader.ready()) {}
System.out.println(reader.readLine());
TextArea.append(reader.readLine()+"\n");
} catch (Exception ex) {
System.out.println("checker is crying: " + ex);
}
}
public void run() {
while (true) {
checker();
}
}
}
謝謝你的回覆和例子。我已經添加了以下的檢查()方法:
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TextArea.append(reader.readLine() + "\n");
} catch (Exception eee) {
System.out.println("Error" + eee);
}
}
});
存在同樣的問題(只接收所有其他服務器的消息),但現在它在所有其他消息鎖定。如果我的服務器發送4條消息,它跳過第一個獲取第二個等。 謝謝你的幫助!
*「我讀了一些關於InvokeLater的內容,但我不確定這是否是正確的使用它的情況。」*是的。試試看,如果遇到困難,請回復我們。 –
對於[示例](http://stackoverflow.com/a/3245805/230513)。 – trashgod
感謝您的回覆。請看我編輯的帖子。 – McScotty89