Я испытываю затруднения при закрытии моего сокета при выходе из моего 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, которые закрываются (), создает, и я не могу бросить его при переопределении метода события как этот.
Как я могу удостовериться, что мои потоки и мой сокет закрываются, когда программа делает?
Спасибо.
Вам не нужно бросать его. Просто поймайте его.
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);
Убедитесь, что вы не блокируете поток диспетчеризации событий - методы close() могут блокироваться в некоторых случаях.
Решил эту проблему, перехватив IOException, как сказал S73417H, и убедившись, что закрыл потоки в таком порядке: выход, вход, сокет. Спасибо всем, кто ответил.