我需要执行一个方法(一种创建文件的方法),当我退出程序时,我该怎么做?
答案 0 :(得分:29)
添加关机挂钩。请参阅此javadoc。
示例:
public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
System.out.println("In shutdown hook");
}
}, "Shutdown-thread"));
}
答案 1 :(得分:7)
因为你正在使用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();
}
});
}
}
请注意使用关机挂钩。如Javadoc中所述,它表明
终止虚拟机时 由于用户注销或系统关闭 底层操作系统可能 只允许一段固定的时间 哪个关闭并退出。它是 因此不宜尝试任何 用户交互或执行 关机中长时间运行的计算 钩
答案 2 :(得分:3)
实现WindowListener(或扩展WindowAdapter),使用windowClosing(如果过程中的错误应该阻止窗口关闭或类似的东西)或windowClosed方法。
下面是官方Sun(Erm ... Oracle)教程的链接,该教程告诉您如何创建WindowListener并将其添加到JFrame:http://download.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
答案 3 :(得分:0)
您还可以在关闭侦听器上添加一个窗口到您的应用程序。
答案 4 :(得分:0)
class ExitThread extends Thread {
public void run() {
// code to perform on exit goes here
}
}
//in main or wherever, beginning of execution
ExitThread t = new ExitThread();
//don't call t.start(), the hook will do it on exit
addShutdownHook(t);
没有测试过,但这应该让你去。此外,如果要将一些参数传递给该线程,则不必使用默认构造函数。
答案 5 :(得分:0)
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();
}
}
});