什么';在java应用程序中使用ShutdowHook的好处是什么

什么';在java应用程序中使用ShutdowHook的好处是什么,java,Java,我接触过Shutdownhook,并学习如何使用它。 允许注册ShutdownHook,JVM将在JVM停止之前调用它。 我们可以在ShutdownHook中添加一些清理工作,如删除临时文件等。 好的,它看起来确实像是一种优雅地关闭当前应用程序的方法。 但是,我对使用它而不是在Swing应用程序的WindowCloseListener中添加清理操作有点困惑 在下面取样 import java.awt.*; import java.awt.event.*; import javax.swing.*

我接触过
Shutdownhook
,并学习如何使用它。
允许注册
ShutdownHook
,JVM将在JVM停止之前调用它。
我们可以在
ShutdownHook
中添加一些清理工作,如删除临时文件等。
好的,它看起来确实像是一种优雅地关闭当前应用程序的方法。
但是,我对使用它而不是在Swing应用程序的WindowCloseListener中添加清理操作有点困惑

在下面取样

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ShutdownhookSample {
    public static void main(String args[]){
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(50, 50));
        panel.setBackground(Color.yellow);
        frame.add(panel);
        frame.addWindowListener(new WindowAdapter(){
            @Override
            public void windowClosing(WindowEvent e){
                frame.dispose();
                System.out.println("Close from listener...");
                /**
                 * Add cleanup operations here
                 */
            }
        });
        frame.pack();
        frame.setVisible(true);

        Runtime.getRuntime().addShutdownHook(new Thread(){
            @Override
            public void start(){
                System.out.println("Close from shutdownhook...");
                /**
                 * Add cleanup operations here
                 */
            }
        });

    }
}
无论我是通过退出按钮还是通过windows任务栏中的“关闭窗口”选项关闭应用程序,都会调用windows关闭侦听器和
ShutdownHook
。唯一的区别是,ShutdownHook的调用稍晚于windows close侦听器。是的,如果我强制关闭进程,没有人会被呼叫

所以我的问题来了:


Swing应用程序中是否真的需要使用
ShutdownHook
?windows close侦听器似乎足以处理清理操作。是否存在windows close listener无法覆盖但ShutdownHook可以覆盖的情况?

如果您需要使用功能X,请使用该功能。现有功能X不足以使用它


换句话说:当您正在创建一个非UI应用程序时,关闭钩子非常有用。或者在关闭主窗口时不退出应用程序。设想一个在后台运行的应用程序,它可以通过某个托盘栏图标重新启动

不,在Swing应用程序中不需要它。。。用Java开发了20年,不仅是Swing,而且我从来都不需要它。它仅用于测试。正常情况下,当JVM终止时,
ShutdownHook
会告诉您。它对于终止/释放应用程序其他部分可能无法管理的本机资源非常有用。“真的需要在Swing应用程序中使用ShutdownHook吗?”——这取决于应用程序正在做什么以及它如何管理它的功能resources@MadProgrammer谢谢你的评论,它确实有帮助