내 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