2012-03-16 4 views
0

У меня есть приложение Java с использованием Socket TCP/IP и GUI. Сервер всегда прослушивает соединение и получает сообщение от клиента. Когда сервер получит сообщение, он покажет форму качания. Моя проблема в том, что когда я нажимаю кнопку закрытия, приложение останавливается, хотя я устанавливаю серверный сокет. ВСЕГДА слушает соединение (по методу put serverSocket.accept() в цикле while(true)). Как я могу решить эту проблему?Проблема с сетевой нитью и качающейся нитью

Вот мой код на сервере: общественного класса TCPServer {

ServerSocket server = null; 
BufferedReader in; 
PrintWriter out; 
Socket client = null; 

//open serverSocket 
public void openServer() { 
    try { 
     server = new ServerSocket(1234); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

//accept connection and read data 
public void listening() { 
    try { 

     while (true) { 
      client = server.accept(); 
      in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      out = new PrintWriter(client.getOutputStream(), true); 
      //read data from stream 
      String s = in.readLine(); 
      System.out.println("String receive: " + s); 

      new NewJFrame().setVisible(true); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void closeServer() { 
    try { 
     if (out != null) { 
      out.close(); 
     } 

     if (in != null) { 
      in.close(); 
     } 
     if (client != null) { 
      client.close(); 
     } 
     if (server != null) { 
      server.close(); 
     } 
    } catch (Exception e) { 
    } 
} 

public static void main(String arg[]) { 
    TCPServer server = new TCPServer(); 
    server.openServer(); 
    server.listening(); 
    server.closeServer(); 
} 

}

+0

показать код, который обрабатывает событие закрытия – Blitzkr1eg

+0

Можете ли вы показать нам код NewJFrame? Вы уверены, что не выполняете 'System.Exit', когда кнопка закрытия нажата? Вы получаете трассировку стека? – GETah

+0

кнопка закрытия находится на окне. и я установил: setDefaultCloseOperation (javax.swing.WindowConstants.EXIT_ON_CLOSE); – PhiVH

ответ

4

От Javadoc:

 EXIT_ON_CLOSE 
     The exit application default window close operation. 

В NewJFrame классе удалить это: setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

Это делает всю остановку приложения, когда кнопка закрытия хит!

Заменить его: setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

Таким образом, вы уверены, что только окно расположено, не все приложения

+0

О, Спасибо за ваш ответ. теперь ваша идея велика. Я решил свою проблему. – PhiVH

+0

@PhiVH Пожалуйста, отметьте это как ответ, если он исправил вашу проблему :) – GETah

+0

@PhiVH, если ответ решает вашу проблему, вы должны нажать «галочку», чтобы принять ответ - так работает Stack Overflow. –

1

Можем ли мы предположить, что ваш Диалог опция "CLOSE_ON_EXIT" установить О.Т., что он называет «System.exit () "непосредственно?

Если нет, укажите больше информации.

+0

Спасибо, GETah ответил на мой вопрос, и я решил свою проблему. – PhiVH

Смежные вопросы