我正在尝试在关闭之前清理应用程序中的资源,继上一个问题之后(Detecting When A Java Application Closes)我已经实现了以下代码,它完美地执行了清理操作。
//Intercept when the application closes
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
//Reclaim resources from MIDI usage
if(_midiInstance.CleanUp())
{
Logger.Add("Closed resources successfully on ShutDown");
}
else
{
Logger.Add("Failed to close all resources on ShutDown");
}
System.exit(0);
}
});
虽然System.exit(0);在没有可见的GUI的情况下,应用程序继续运行,理解并处理了调用。我已经考虑过将System.exit(0)调用放在Thread之外但是它超出了范围,没有任何其他线程或流在运行。
挂钩到ShutDown事件以确保一切都关闭时,我还需要采取额外步骤吗?
感谢您的时间,我非常感谢。
答案 0 :(得分:3)
在阅读完其他问题后,您的窗口似乎可能没有调用dispose()。如果是,那将解释您的问题的原因。
答案 1 :(得分:1)
你需要越过窗户关闭按钮:
//overriding the windowClosing() method will allow the user to click the close button
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
通过这样做,程序将关闭而不仅仅是变得不可见。