Проблема с сетевой нитью и нитью - PullRequest
0 голосов
/ 17 марта 2012

У меня есть Java-приложение, использующее Socket TCP / IP и GUI.Сервер всегда прослушивает соединение и получает сообщение от клиента.Когда сервер получил сообщение, он покажет форму свинга.Моя проблема в том, что когда я нажимаю кнопку закрытия, приложение останавливается, хотя я устанавливаю сокет сервера ВСЕГДА слушает соединение (с помощью метода serverSocket.accept() in loop 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();
}

}

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

С 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);

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

1 голос
/ 17 марта 2012

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

Если нет, дайте больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...