2012-09-13 279 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

鉴于此作业的性质,我假设您已经介绍了多线程是安全的。这听起来像是尝试其中一些的好时机。