如果我们希望程序正常关闭,我们会设置frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
。
如果我希望我的java程序将某些内容写入文件然后关闭它,该怎么办?
哪种方法最好?
答案 0 :(得分:4)
您可以尝试java.awt.event.WindowAdapter
并覆盖此方法:
windowClosing(WindowEvent e)
@AndrewThompson发表了很好的评论。此外,这里我假设一个非常简单的GUI场景。通常,写入文件的线程也应关心关闭文件通道,最好是在try / catch-block的finally子句中。在我看来,在最后一刻关闭资源的整个想法并不是那么好。
@Lind在Runtime.addShutdownHook
的javadoc中,您可以阅读:
“关闭挂钩在虚拟机的生命周期中的一个微妙时间运行,因此应该进行防御性编码。特别是它们应该被编写为线程安全的并且尽可能避免死锁。他们还应该不要盲目依赖可能已经注册了自己的关闭钩子的服务,因此可能自己也在关闭过程中。尝试使用其他基于线程的服务,例如AWT事件派遣线程,可能会导致死锁。“
所以需要一些照顾。如果您在shutdownhook中使用自己的程序部分或自己的文件服务,它可能不起作用,但可以在WindowAdapter中使用。如果你只是直接依赖于shutdownhook中的java.io-package,那么这种方法可能会有效。
总的来说,我重申并确认资源最好不要这么晚关闭。你必须有充分的理由不这样做。
答案 1 :(得分:0)
您可能想要使用Runtime.addShutdownHook
。
关闭挂钩允许您在VM关闭之前执行线程。
这是一个小用法示例:
public class Foo {
public static void main(String... args) {
Runtime.getRuntime().addShutdownHook(
new Thread() {
public void run() {
System.out.println("Hello");
}
}
);
}
}