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();
}
}
});