我正在构建一个即时通讯应用程序。我需要在 Swing JFrame(小“x”)的默认关闭按钮上添加一个动作事件。
当客户端按下 X 按钮时,我需要告诉服务器他离线并且只有在该操作发生后我必须关闭窗口。我似乎无法找到如何在默认按钮上获取操作侦听器。
问问题
1322 次
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
听起来你想addWindowListener
用WindowListener
which 句柄windowClosing
或windowClosed
. 您可能很想创建一个子类,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 回答