2

我正在构建一个即时通讯应用程序。我需要在 Swing JFrame(小“x”)的默认关闭按钮上添加一个动作事件。
当客户端按下 X 按钮时,我需要告诉服务器他离线并且只有在该操作发生后我必须关闭窗口。我似乎无法找到如何在默认按钮上获取操作侦听器。

4

5 回答 5

6

看看这个可能对你有帮助。关闭应用程序
如果有人按下关闭按钮,您可以给出自己的实现。

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.
     }
  });
于 2012-09-26T11:51:45.607 回答
5

查看 Runtime.addShutdownHook() 方法。http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29

于 2012-09-26T11:49:29.677 回答
4

只需WindowListener添加到您的 JFrame 并使用事件windowClosing

于 2012-09-26T11:48:21.383 回答
3

听起来你想addWindowListenerWindowListenerwhich 句柄windowClosingwindowClosed. 您可能很想创建一个子类,WindowAdapter这样您就可以覆盖您感兴趣的方法。

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

  • 无论如何,与服务器的任何连接都将关闭
  • 任何后台线程都将被终止
于 2012-09-26T11:48:36.807 回答
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)请在完成服务器通信后手动说。

于 2012-09-26T11:49:17.177 回答