如何使用DISPOSE_ON_CLOSE或EXIT_ON_CLOSE的窗口关闭操作调用ShutdownHook线程

时间:2011-06-01 14:36:39

标签: java multithreading process

假设Runtime.getRuntime().addShutdownHook(new Thread()已正确设置,当Java应用程序窗口(JFrame)关闭时(在这种情况下是唯一的窗口)和dispose窗口默认情况下,如何调用ShutdownHook线程关闭操作是DISPOSE_ON_CLOSE还是EXIT_ON_CLOSE

请注意,对于使用System.exit(0)处理的退出命令,然后通过ShutdownHook线程提供该命令,应用程序将正确终止,因为所有关联的线程在Java应用程序退出之前终止。所以我希望通过关闭JFrame窗口来完成同样的事情来完成ShutdownHook线程的清理。

3 个答案:

答案 0 :(得分:2)

frame.addWindowListener()并覆盖windowClosed(WindowEvent e)。从你的问题看,你只需要在窗口关闭时进行事件处理。

祝你好运!

答案 1 :(得分:1)

这符合您的规范。如果我通过单击X按钮关闭框架,则会调用关闭钩子。

import javax.swing.*;

class ShutDownHookDemo {

    public static void endMessage() {
        // clean up threads here..
        System.out.println("Thanks for using the app.");
    }

    public static void main(String[] args) {
        Thread t = new Thread() {
            public void run() {
                endMessage();
            }
        };
        Runtime.getRuntime().addShutdownHook(t);

        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300,300);

        f.setVisible(true);
    }
}

答案 2 :(得分:0)

Runtime.getRuntime().addShutdownHook(...);