2012-09-13 276 views
1

我的聊天室程序。我有2個包,其中1個用於客戶端&其他服務器。運行服務器程序,填寫PortField並點擊按鈕啓動服務器,窗口程序卡住了,我無法做任何事情,但服務器仍然工作,客戶端仍然連接和聊天。聊天服務器 - 客戶端/服務器聊天Java作業

private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) {           

    int port = Integer.parseInt(txtPort.getText()); 
    go(port); 
}          
private void go(int port){ 
    try { 
     listUser = new Hashtable<String, ClientConnect>(); 
     server = new ServerSocket(port); 
     txaStatus.append("Server is started\n"); 
     txaStatus.append("IP Server : "+InetAddress.getLocalHost().getHostAddress()+"\n"); 
     txaStatus.append("Port : " + port + "\n"); 
     while(true){ 
      client = server.accept(); 
      new ClientConnect(this,client);//class ClientConnect for DataOutPut & DataInput Client <=> Server 
     } 
    } catch (IOException e) { 
     txaStatus.append("Server cannot start\n"); 
        JOptionPane.showMessageDialog(this,"Port busy","warning",JOptionPane.WARNING_MESSAGE); 
        System.exit(0); 
    } 
} 
+0

問題是什麼? –

+0

@Mouny什麼問題?很高興你正在做作業:) – mtk

+0

如果你被告知同時去國家'X'和國家'Y',你會怎麼做? ;) – noMAD

回答

3

您無法在GUI線程中運行您的服務器,這將阻止程序接受任何其他輸入。您需要將go()方法移入單獨的線程。

+0

如果您嘗試在GUI線程中運行服務器,則該線程無法恢復到更新GUI,直到您退出等待並接受客戶端網絡消息的循環。您需要兩個線程,因此您可以同時有效地完成兩件事情,處理客戶端,並使GUI保持最新狀態。 –

+0

非常感謝。我用2個線程解決了它。剛開始使用Java:D –

0

鑑於此作業的性質,我假設您已經介紹了多線程是安全的。這聽起來像是嘗試其中一些的好時機。