在用户按下[x]后窗口关闭之前做一些事情

时间:2012-09-26 11:45:01

标签: java swing jframe windowlistener

我正在构建一个即时消息应用程序。我需要在Swing JFrame(小“x”)的默认关闭按钮上添加一个动作事件。
当客户端按下X按钮时,我需要告诉服务器他是否脱机,只有在发生该操作后我才能关闭窗口。我似乎无法找到如何在默认按钮上获取动作监听器。 / p>

5 个答案:

答案 0 :(得分:6)

看看这可能对你有所帮助。 Closing an Application
如果有人按下关闭按钮,您可以提供自己的实施。

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.
     }
  });

答案 1 :(得分:5)

答案 2 :(得分:4)

只需add一个WindowListener到您的JFrame并使用活动windowClosing

答案 3 :(得分:3)

您希望通过处理addWindowListenerwindowClosingWindowListener来致电windowClosed。你可能想要创建一个WindowAdapter的子类,这样你就可以覆盖你感兴趣的方法。

不要忘记您与服务器的通信应该在不同的线程中 - 不要使用网络流量阻止UI线程。但是,请记住,如果您的整个申请正在结束:

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

答案 4 :(得分:3)

JFrame f = new JFrame("Blah");
f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        //do whatever you want before the window closes.
    }
});
f.setVisible(true);

不要f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,因为这可能会中断您的服务器通信。相反,当您完成服务器通信时,请手动说出System.exit(0)