Как я закрываю сокет или Поток ввода-вывода в windowClosing событии окна Java?

Я испытываю затруднения при закрытии моего сокета при выходе из моего 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, которые закрываются (), создает, и я не могу бросить его при переопределении метода события как этот.

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

Спасибо.

1
задан FrogOfDoom 23 July 2010 в 02:12
поделиться

3 ответа

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

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

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

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

 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2
ответ дан 2 September 2019 в 22:50
поделиться

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

0
ответ дан 2 September 2019 в 22:50
поделиться

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

0
ответ дан 2 September 2019 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: