为Java应用程序添加退出事件响应

2016-01-29 12:50 33 1 收藏

为Java应用程序添加退出事件响应,为Java应用程序添加退出事件响应

【 tulaoshi.com - Java 】

  一个完整的Java应用程序,通常至少要有一个应用程序的结束点。对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让程序自然运行到结束。

  如:下列典型代码

  package untitled14;

  /**
  * This application is to demo how an applcation end
  */
  public class Test {
  public Test() {}
  public static void main(String[] args) {
  Test test1 = new Test();
  //.................
  System.out.println("hello world");
  //Do something before system exit
  System.exit(0);//也可以不写这句代码,让程序自然结束。
  }
  }

  对于简单的应用系统,我们直接可以在System.exit(0)代码执行前,添加需要在应用程序退出前需要完成的工作,如:关闭网络连接,关闭数据库连接等。

  然而,对于比较复杂的多线程应用,线程运行的状态较复杂,我们就很难预料程序何时结束,如何能在应用程序结束事件到来时,处理我们要做的工作呢?这就用到了Java对应用程序的退出的事件出处理机制。

  对当前应用程序对象的获得,Java通过Runtime静态方法:Runtime.getRuntime()通过Runtime的 void addShutdownHook(Thread hook) 法向Java虚拟机注册一个shutdown钩子事件,这样一旦程序结束事件到来时,就运行线程hook,我们在实际应用时候,只要将程序需要完成之前做的一些工作直接通过线程hook来完成。具体演示代码如下:

  /*****************************************************************************
  本程序仅演示,如何在Java应用程序中添加系统退出事件处理机制
  *****************************************************************************/
  package untitled14;
  import java.util.*;
  import java.io.*;

  /**
  * This application is used to demo how to hook the event of an application
  */
  public class Untitled1 {

  public Untitled1() {
  doShutDownWork();
  }

  /***************************************************************************
  * This is the right work that will do before the system shutdown
  * 这里为了演示,为应用程序的退出增加了一个事件处理,
  * 当应用程序退出时候,将程序退出的日期写入 d:t.log文件
  **************************************************************************/
  private void doShutDownWork() {
  Runtime.getRuntime().addShutdownHook(new Thread() {

   public void run() {
    try {
     FileWriter fw = new FileWriter("d:t.log");
     System.out.println("Im going to end");
     fw.write("the application ended! " + (new Date()).toString());
     fw.close();
    }
    catch (IOException ex) {
    }

   }
  });
  }

  /****************************************************
  * 这是程序的入口,仅为演示,方法中的代码无关紧要
  ***************************************************/

  public static void main(String[] args) {
  Untitled1 untitled11 = new Untitled1();
  long s = System.currentTimeMillis();
  for (int i = 0; i < 1000000000; i++) {
   //在这里增添您需要处理代码
  }
  long se = System.currentTimeMillis();
  System.out.println(se - s);
  }
  }

  在上述程序中,我们可以看到通过在程序中增加Runtime.getRuntime().addShutdownHook(new Thread()) 事件监听,捕获系统退出消息到来,然后,执行我们所需要完成工作,从而使我们的程序更健壮!
2005年5月12日 2005年5月10日 2005年3月30日 2005年3月30日 2005年3月30日 2005年3月30日 2005年3月30日 2005年3月29日 2005年3月29日 2005年3月29日 2005年3月29日 2005年3月28日

来源:http://www.tulaoshi.com/n/20160129/1487733.html

延伸阅读
给你的应用程序添加动态鼠标 作者:魏镇江 下载本文示例源代码 本文程序运行效果图 鼠标是一个应用程序与用户交互的主要手段,因此如果在应用程序里能显示一些比较“酷”的鼠标的话,无疑能增加软件的人气值。但是我们一般情况下用VC++都只能调用系统提供的鼠标或生成一些...
标签: Delphi
  在Win95中,当我们将鼠标移至某个控件上时,便会在鼠标所指之处弹出一个小窗口,告诉我们这个控件的用途,这便是“浮动提示”。这种提示方式可以及时地提供有关信息,那么怎样在VB中实现这种功能呢?     首先我们在Form的任意位置放一个Text1作为浮动提示的通用文本显示框,几个重要属性设置为:     ...
标签: Java JAVA基础
Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已...
Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更轻易。 虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些...
假如应用程序需要动态生成 PDF 文档,则需要 iText 库。开放源码的 iText 库使 PDF 文档的创建能够在瞬间完成。本文介绍了 iText 并提供了使用它从 Java ? 技术应用程序生成 PDF 文档的由浅入深的指南。我们创建了一个示例应用程序以更好地理解 iText。 很多应用程序要求动态生成 PDF 文档。这类应用程序包括银行生成用于电子邮...

经验教程

320

收藏

95
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部