日期:2014-05-19  浏览次数:20699 次

java聊天程序,服务器端卡机?
把服务器端写在了swing上,ServerSocket ss=new ServerSocket(8888)写在了一个线程里面,当第一次点击启动服务器时,提示已经连上,可是客户端确连不上来,再点击一次启动服务器,窗体卡死,但是客户端可以连接上来,为什么会是这样,怎么解决窗体卡死的问题??
start=new JMenuItem("启动服务器");
  JMenuItem exit=new JMenuItem("退出");
  menu.add(start);
  menu.add(exit);
 
 
  //start添加事件
  start.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
  // while(true){
start_service ss=new start_service();
Thread starts=new Thread(ss);
starts.start();
socketConn();
  // }
   
}
  });



  public void socketConn(){
 
  try {
while(service){
  s=ss.accept();
  System.out.println("客户端连接成功");
  Client c=new Client(s);
  clients.add(c);
new Thread(c).start();
int count=clients.size();
//在线人数在标签显示出来
String str=new Integer(count).toString();
label_count.setText(str);
}
} catch (IOException e) {
e.printStackTrace();
}
 
 
  }



//服务器启动线程
  private class start_service implements Runnable{

@Override
public void run() {

  try {
System.out.println("线程启动");

ss=new ServerSocket(8888);
service=true;
 
//JOptionPane.showMessageDialog(ChatServer.this,"服务器启动成功");
 
 
} catch (IOException e) {
  JOptionPane.showMessageDialog(ChatServer.this,"服务器已经连上");
  System.exit(0);
}

}[code=Java][/code]

------解决方案--------------------
.............启动一个线程去监听SOCKET?干嘛不 监听到一个SOCKET在启线程呢?