我希望我的应用程序在关闭之前做一些事情

时间:2014-01-01 19:04:02

标签: java swing jframe exit

如果我们希望程序正常关闭,我们会设置frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

如果我希望我的java程序将某些内容写入文件然后关闭它,该怎么办?

哪种方法最好?

2 个答案:

答案 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");
                }
            }
        );
    }

}