Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java窗口的windowClosing事件中关闭套接字或I/O流?_Java_Sockets_Iostream - Fatal编程技术网

如何在Java窗口的windowClosing事件中关闭套接字或I/O流?

如何在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

退出Java应用程序时,我无法关闭套接字。我认为确保插座关闭的一个简单方法是将其挂在Swing JFrame中的windowClosing上,如下所示:

    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不是论坛。你应该删除这篇文章,并接受你认为最有帮助的答案。