我的聊天室程序。我有2个包,1个用于Client&其他的服务器。运行Server程序,填写PortField并单击Start Server按钮,窗口程序卡住,我无法对其执行任何操作,但Server仍然有效,客户端仍然可以连接并聊天。
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 :(得分:3)
您无法在GUI线程中运行服务器,这将阻止程序接受任何其他输入。您需要将go()
方法移动到单独的线程中。
答案 1 :(得分:0)
我认为考虑到这项任务的性质,假设你已经被引入多线程是安全的。这听起来是尝试其中一些的好时机。