Как закрыть сокет или поток ввода-вывода в событии windowClosing окна Java? - PullRequest
1 голос
/ 23 июля 2010

У меня проблемы с закрытием сокета при выходе из приложения Java.Я подумал, что простой способ убедиться, что сокет закрыт, - это подключить его к windowClosing в JFrame Swing следующим образом:

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            input.close();
            output.close();
            socket.close();

            frame.dispose();
            System.exit(0);
        }
    });

Но тогда мне нужно обработать IOException, которое создает close (), иЯ не могу выбросить его, когда переопределяю метод события таким образом.

Как я могу убедиться, что мои потоки и сокет закрываются, когда программа закрывается?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 23 июля 2010

Вам не нужно бросать это.Просто поймайте его.

try {
  if(null != input) {
    input.close();
  }
} catch(IOException ex) {
  // Log or ignore the exception.
}

Кроме того, вам не нужно вызывать dispose () или System.exit (0);методы, если ваше основное приложение Frame уже закрывается.

Убедитесь, что в вашем основном приложении JFrame установлено следующее.

 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
0 голосов
/ 23 июля 2010

Решил эту проблему, перехватив IOException, как сказал S73417H, и убедившись, что потоки закрыты в следующем порядке: выход, вход, сокет. Спасибо всем, кто ответил.

0 голосов
/ 23 июля 2010

Убедитесь, что вы не блокируете поток отправки событий - в некоторых случаях методы close () могут блокироваться.

...