我有一个应用程序,在退出时应关闭所有窗口并写入一些配置文件。
如果没有我在下面做的事情,以下内容从未被触发过,因此写出所有配置的closeEXES从未运行过。
mainframe.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(WindowEvent winEvt) {
closeEXES();
}
});
我使用以下内容在Mac OS上捕获Cmd-Q:
import com.apple.eawt.QuitStrategy;
import com.apple.eawt.Application;
主要是:
if (System.getProperty("os.name").equals("Mac OS X")) {
Application.getApplication().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
我之前的版本:
public class MacQuitAdapter extends ApplicationAdapter {
@Override
public void handleQuit(ApplicationEvent e) {
System.out.println("Using deprecated AplicationAdapter for handling Quit.");
}
}
我如何用JDK 8完成同样的事情? “同样的事情”是确保当命中Command-Q时,窗口的关闭将被传递给AWT,以便windowClosing方法可以做我想要的。
或者,是否还有一些其他听众需要感知Command-Q?我会继续寻找,但认为这里值得一试。
感谢。
答案 0 :(得分:0)
我很抱歉回答我自己的问题。如果这是一个失礼,请告诉我。我used this加上仍保留代码的关闭窗口部分。对于JDK 8,这可以完成我想要的大部分工作。
所以现在代码看起来像这样:
mainframe.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(WindowEvent winEvt) {
closeEXES();
}
});
if (System.getProperty("os.name").equals("Mac OS X"))
{
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
System.out.println("in : run () : shutdownHook");
doCloses();
System.out.println("Shutdown hook completed...");
}
});
}
一个方法,closeEXES,提示用户确保他们真的要退出应用程序。另一个检查一个条件(文件是否在之前关闭?)并在它们尚未关闭时关闭它们。
为了完整性:
public void closeEXES() {
int n = JOptionPane.showConfirmDialog(mainframe,
"Close EXES GUI?", "Closing EXES GUI",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (n == 0) {
System.out.println("Exiting...start");
doCloses();
System.exit(0);
}
}
public void doCloses() {
if ( beenClosed )
{
System.out.println("Already closed all files.");
}
else
{
// ... a bunch of stuff here writing GUI screen positions to a file and
// things like that ...
beenClosed = true;
}
}