Java ShutdownHook

关键字: shutdownhook

要想在JVM关闭的时候,来执行程序的一些操作,比如:保存一些该保存的日志,数据等,我们可以利用JDK提供的ShutdownHook钩子来实现。

JDK中定义:public void addShutdownHook(Thread hook);

即向虚拟机添加关闭的钩子程序. 请注意, 该 hook 线程必须是已经初始化但是没有运行的线程, 这个线程将在虚拟机响应用户的中断之前运行, 例如按下 ^C, 或者系统范围的事件, 例如注销或者关闭系统时.

下面是个简单的例子:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFrame;

/*
 * @author Seyo <[email protected] />
 */
public class Application extends JFrame {

	private FileWriter fw_log;
	private BufferedWriter bw_log;

	public static void main(String[] args) throws Exception {
		Application frame = new Application();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.processApp1();
		frame.setVisible(true);
	}

	public Application() throws IOException {
		fw_log = new FileWriter("log.txt");
		bw_log = new BufferedWriter(fw_log);

		setSize(200, 100);

		setLocation(100, 100);

		setTitle("Test for ShutdownHook");
		
	   Runtime.getRuntime().addShutdownHook(new Thread() {
           public void run() {
               endApp();
           }
       });;

	}
	
	
	public void processApp1() throws IOException {
		bw_log.write("testing");
		bw_log.newLine();
	}

	// close the log file

	public void endApp() {
		try {
			bw_log.close();
		} catch (IOException e) {
			System.err.println(e);
		}
	}

}

 

该程序运行的时候打开一个简单的窗口,我们要实现的是在关闭窗口后,往log.txt写入:testing 。只需要在构造函数中加入:

Runtime.getRuntime().addShutdownHook(new Thread() {
           public void run() {
               endApp();//为程序中自定义的代码。
           }

 来自:http://www.yangxinyong.com/blog/entry/2008_11_16_71.html

你可能感兴趣的:(java,jdk,虚拟机,swing,Gmail)