2013-08-19 14 views
0

我正在使用Java Socket编程。当我第一次点击按钮时,Socket完美运行。但按钮和其他功能不再工作。当我点击它们时,所有人都被禁用或不反应。如何在Java中的socket中停止while(true)

这是主类

JButton btnRemote = new JButton("Remote "); 
     btnRemote.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 

       ServerInitiator ser=new ServerInitiator(); 
       ser.initialize(4444); 
      } 
     }); 

Socket类

public static void main(String args[]){ 
     String port = JOptionPane.showInputDialog("Please enter listening port"); 
     new ServerInitiator().initialize(5555); 
    } 

    public void initialize(int port){ 

     try { 
      ServerSocket sc = new ServerSocket(port); 
      //Show Server GUI 
      drawGUI(); 
      // drawGUI(); 
      //Listen to server port and accept clients connections 
      while(true){ 
       Socket client = sc.accept(); 
       System.out.println("New client Connected to the server"); 
       //Per each client create a ClientHandler 
       new ClientHandler(client,desktop); 
      } 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
+1

初始化应该在一个单独的线程来完成。 – Taylor

+0

在上面的上下文中是什么'ClientHandler'?你能分享一下吗? –

+0

你的意思是哪个“按钮其他功能”?它看起来像按钮有一个单一的功能,产生一个'ServerInitiator'。 –

回答

1

您应该将GUI从你的服务器逻辑中分离出来。无论如何, 可以使ClientHandler的一个Runnable,然后生成一个新的线程为每个新客户:

// server is listening 
while (true){ 
... 
new Thread(new ClientHandler(client, desktop)).start(); 
... 
} 
+0

谢谢。它的工作正常 – Puvanarajan