2012-06-06 50 views
2

我正在製作服務器端應用程序,但是當我試圖將文本附加到JTextarea時,它不起作用。然而,它打印到控制檯。追加到JTextArea

它工作正常,直到我添加行serverSocket.accept()

這裏是我的代碼:

try { 
    serverSocket=new ServerSocket(4545); 
    LogOutput.append("Seccessfuly connected\n"); 
    System.out.println("Seccessfuly connected\n");    

    StartButon.setEnabled(false); 

    while(true){ 
     LogOutput.append("waiting for client\n"); 
     System.out.println("waiting for client\n"); 

     serverSocket.accept(); 
     LogOutput.append("Client connected to server\n");    
    } 
} 
catch(Exception e){ 
    LogOutput.append("cannot establish connection : "+ e +"\n"); 
    StartButon.setEnabled(true); 
} 
+0

你在哪裏使用JTextArea? – evanwong

回答

4

您完全阻止了Swing事件線程或EDT。如果您希望您的Swing GUI與長時間運行的過程結合使用,則可以從while (true)塊獲取大部分代碼,並將其放入後臺線程中。請閱讀Concurrency in Swing教程,瞭解爲什麼這很重要,以及如何使用SwingWorker對象解決此問題。

+0

簡單,清晰和準確的答案+1 – mKorbel

4

從給定的代碼段,你的問題似乎你正在尋找連接到服務器\ n

客戶

是添加到你的textArea。

serverSocket.accept(); 
LogOutput.append("Client connected to server\n");  

一旦你說的ServerSocket.accept()現在將等待客戶端的連接到達,除非有一些客戶你的下一個行代碼不會被執行。 serverSocket.accept是阻止方法,啓動你的客戶端程序,你的服務器將開始處理下一行代碼。

docs

public Socket accept() throws IOException 

監聽連接進行到此套接字和接受它。該方法會阻塞,直到建立連接。