2012-06-06 102 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 

监听连接进行到此套接字和接受它。该方法会阻塞,直到建立连接。