我正在构建一个即时消息应用程序。我需要在Swing JFrame(小“x”)的默认关闭按钮上添加一个动作事件。
当客户端按下X按钮时,我需要告诉服务器他是否脱机,只有在发生该操作后我才能关闭窗口。我似乎无法找到如何在默认按钮上获取动作监听器。 / p>
答案 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)
查看Runtime.addShutdownHook()方法。 http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29
答案 2 :(得分:4)
只需add一个WindowListener到您的JFrame并使用活动windowClosing
答案 3 :(得分:3)
您希望通过处理addWindowListener
或windowClosing
的WindowListener
来致电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)
。