如何在Java窗口的windowClosing事件中关闭套接字或I/O流?
退出Java应用程序时,我无法关闭套接字。我认为确保插座关闭的一个简单方法是将其挂在Swing JFrame中的windowClosing上,如下所示:如何在Java窗口的windowClosing事件中关闭套接字或I/O流?,java,sockets,iostream,Java,Sockets,Iostream,退出Java应用程序时,我无法关闭套接字。我认为确保插座关闭的一个简单方法是将其挂在Swing JFrame中的windowClosing上,如下所示: frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { input.close(); output.close(); socke
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
input.close();
output.close();
socket.close();
frame.dispose();
System.exit(0);
}
});
但是我必须处理close()创建的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所述,并确保按以下顺序关闭流:输出、输入、套接字。感谢所有回答的人。当我发现这样的异常时,窗口不会关闭。它只是静止不动,我必须终止IDE的运行。而且,插座仍然没有关闭。不知道我如何才能做到这一点。您必须在主应用程序框架上设置以下内容。frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);我如何判断它是否阻塞?如果真的发生了,我该如何预防呢?谢谢。这可能取决于环境。例如,在blackberry close()上,方法可能会阻塞2分钟。所以(听起来很糟糕)修复方法是生成一个线程来关闭套接字!请记住,关闭套接字会自动关闭输入和输出流,这是额外的工作。StackOverflow不是论坛。你应该删除这篇文章,并接受你认为最有帮助的答案。