聊天服务器-客户端/服务器聊天Java作业

聊天服务器-客户端/服务器聊天Java作业,java,Java,我的聊天室程序。我有两个软件包,一个用于客户端,另一个用于服务器。运行服务器程序,填写端口字段并单击按钮启动服务器,窗口程序被卡住,我不能在上面做任何事情,但服务器仍然工作,客户端仍然连接和聊天 private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) { int port = Integer.parseInt(txtPort.g

我的聊天室程序。我有两个软件包,一个用于客户端,另一个用于服务器。运行服务器程序,填写端口字段并单击按钮启动服务器,窗口程序被卡住,我不能在上面做任何事情,但服务器仍然工作,客户端仍然连接和聊天

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);
    }
}
private void btnopcompositionperformed(java.awt.event.ActionEvent evt){
int-port=Integer.parseInt(txtPort.getText());
go(港口);
}                                       
专用void go(内部端口){
试一试{
listUser=新哈希表();
服务器=新的服务器套接字(端口);
txaStatus.append(“服务器已启动\n”);
append(“IP服务器:“+InetAddress.getLocalHost().getHostAddress()+”\n”);
附加(“端口:“+Port+”\n”);
while(true){
client=server.accept();
新建ClientConnect(此,客户端);//为DataOutPut和DataInput客户端服务器设置ClientConnect类
}
}捕获(IOE异常){
txaStatus.append(“服务器无法启动\n”);
showMessageDialog(这是“端口忙”、“警告”、JOptionPane.warning\u消息);
系统出口(0);
}
}

您不能在GUI线程中运行服务器,这将阻止程序接受任何其他输入。您需要将
go()
方法移动到一个单独的线程中。

鉴于此任务的性质,我可以安全地假设您已经开始使用多线程。这听起来是尝试一下的好时机

@Mouny有什么问题?很高兴你在做作业:)如果你被告知同时去国家
X
和国家
Y
,你将如何做?;)您还应该知道事件调度线程()。如果您尝试在GUI线程中运行服务器,那么该线程将无法恢复到更新GUI,直到您退出等待并接受客户端网络消息的循环。您需要两个线程,这样您就可以有效地同时做两件事,处理客户机,并使GUI保持最新。非常感谢大家。我用两个线程解决了它。只是Java:D的初学者