Java 关闭程序时运行方法?

Java 关闭程序时运行方法?,java,swing,Java,Swing,我需要执行一个方法(一个创建文件的方法),当我退出我的程序时,我该怎么做?添加关机钩子。看这个 例如: public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { public void run() { System.out.println("In shutdown hook");

我需要执行一个方法(一个创建文件的方法),当我退出我的程序时,我该怎么做?

添加关机钩子。看这个

例如:

public static void main(String[] args) {
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        public void run() {
            System.out.println("In shutdown hook");
        }
    }, "Shutdown-thread"));
}

因为你正在使用Swing。当您关闭应用程序时(通过按下关闭按钮),您可以简单地隐藏框架。运行创建文件的方法,然后退出框架。这将导致优雅的退出。如果出现任何错误/异常,您可以将其记录到单独的文件中

这是密码

package test;

import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;

public class TestFrame extends JFrame{

    public TestFrame thisFrame;

    public TestFrame(){
        this.setSize(400, 400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    }

    public static void main(String[] args){
        TestFrame test = new TestFrame();
        test.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentHidden(ComponentEvent e) {
                System.out.println("Replace sysout with your method call");
                ((JFrame)(e.getComponent())).dispose();
            }
        });
    }

}
请注意使用关机挂钩。如表1所示,它指出:

当虚拟机终止时 由于用户注销或系统关闭 底层操作系统可能会 只允许一段固定的时间 关闭并退出。它是 因此,不应尝试任何 用户交互或执行 关机时长时间运行的计算 钩子


您还可以在应用程序中添加关闭侦听器窗口

实现WindowListener(或扩展WindowAdapter),使用(如果过程中的错误会阻止窗口关闭或类似的操作)或方法

下面是Sun(Erm…Oracle)官方教程的链接,该教程告诉您如何创建WindowListener并将其添加到JFrame中:


还没有测试过,但这应该能让你继续。另外,如果要向该线程传递一些参数,则不必使用默认构造函数。

addWindowListener是更好的解决方案:

frame.addWindowListener(new WindowAdapter()
{
    public void windowClosing(WindowEvent we)
    {
      // run methods before closing  

try {

                                Runtime.getRuntime().exec("taskkill /f /im java.exe");

                            } catch (IOException e4) {
                                // TODO Auto-generated catch block
                                e4.printStackTrace();
                            }

    }
});

你在开发什么样的程序,命令行,桌面,Web应用程序,什么?如何启动它,如何关闭它?我现在通过在Eclipse中按run按钮启动它,完成后它将由一个.jar文件运行,您只需单击普通的windows关闭按钮即可关闭它。目前这是一个非常基本的游戏。所以,它是一个Swing应用程序,或者可能是SWT应用程序?它是一个Swing应用程序,是的。我不太确定如何在代码中实现它。我能帮忙吗?如果你看看斯坦的其他问题,我认为这不是他需要的。这很有效,这是我想要的。我为所有不好的解释感到抱歉,我的解释有点不好。@Stan我很高兴它有帮助。太棒了!谢谢你的帮助,知道这一点真的很有用。所以,我把我的frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE),但是,我现在该如何运行我想要的方法呢?@Stan:嗨,Stan,我已经用代码更新了。如果您有任何疑问,askyou将在componentHidden()方法中运行您想要的任何方法。
frame.addWindowListener(new WindowAdapter()
{
    public void windowClosing(WindowEvent we)
    {
      // run methods before closing  

try {

                                Runtime.getRuntime().exec("taskkill /f /im java.exe");

                            } catch (IOException e4) {
                                // TODO Auto-generated catch block
                                e4.printStackTrace();
                            }

    }
});