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
Java 在用户按下[x]后窗口关闭之前执行某些操作_Java_Swing_Jframe_Windowlistener - Fatal编程技术网

Java 在用户按下[x]后窗口关闭之前执行某些操作

Java 在用户按下[x]后窗口关闭之前执行某些操作,java,swing,jframe,windowlistener,Java,Swing,Jframe,Windowlistener,我正在构建一个instant messenger应用程序。我需要在Swing JFrame的默认关闭按钮(小“x”)上添加一个操作事件。 当客户端按下X按钮时,我需要告诉服务器他脱机了,只有在该操作发生后,我才必须关闭窗口。我似乎找不到如何在默认按钮上获取操作侦听器。只需在JFrame中添加一个事件,并使用事件听起来像是要用处理或的WindowListener调用。您可能希望创建的子类,以便只重写您感兴趣的方法 不要忘记与服务器的通信应该在不同的线程中-不要用网络流量阻塞UI线程。但是,请记住,

我正在构建一个instant messenger应用程序。我需要在Swing JFrame的默认关闭按钮(小“x”)上添加一个操作事件。

当客户端按下X按钮时,我需要告诉服务器他脱机了,只有在该操作发生后,我才必须关闭窗口。我似乎找不到如何在默认按钮上获取操作侦听器。

只需在JFrame中添加一个事件,并使用事件

听起来像是要用处理或的
WindowListener
调用。您可能希望创建的子类,以便只重写您感兴趣的方法

不要忘记与服务器的通信应该在不同的线程中-不要用网络流量阻塞UI线程。但是,请记住,如果您的整个应用程序即将关闭:

  • 无论如何,与服务器的任何连接都将关闭
  • 任何后台线程都将被终止

不要执行
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)System.exit(0)

查看Runtime.addShutdownHook()方法

看看这个,也许它对你有帮助
如果有人按下关闭按钮,您可以给出自己的实现

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frame.addWindowListener( new WindowAdapter()
 {
   public void windowClosing(WindowEvent e)
    {
      // Here you can give your own implementation according to you.
     }
  });

这类问题在这里只被问过100多次,包括:。投票以复制方式结束。结束它,新手错误。谢谢!我差一点就成功了。我只是写了新的windowAdapter,没有添加它。我没有意识到。谢谢你!
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frame.addWindowListener( new WindowAdapter()
 {
   public void windowClosing(WindowEvent e)
    {
      // Here you can give your own implementation according to you.
     }
  });