`

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()) 事件监听,捕获系统退出消息到来,然后,执行我们所需要完成工作,从而使我们的程序更健壮

分享到:
评论

相关推荐

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

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

    记事本设计 JAVA程序设计

    【标题】"记事本设计 JAVA程序设计"揭示了这个项目是使用Java编程语言实现的一个类似于Windows记事本的应用程序。在Java中,记事本的设计通常涉及到GUI(图形用户界面)的创建,使得用户可以编辑文本,改变字体样式...

    java应用小程序代码

    通过以上分析可以看出,这个Java程序是一个典型的GUI应用示例,它演示了如何使用AWT库创建简单的图形用户界面,同时实现了基本的数据输入、处理和显示功能。尽管代码较为简单,但它涵盖了GUI编程的基本要素,对于...

    Java gui简单程序

    在Java编程领域,GUI(图形用户界面)是创建桌面应用程序不可或缺的一部分。本示例程序"Java GUI简单程序"旨在教你如何构建一个基本的GUI界面,同时整合数据库连接、查询功能,并利用JTable来展示查询结果。这是一个...

    Java语言程序设计课程设计实训项目——应用Java-Swing-GUI组件技术实现课程选课系统GUI窗口(第1部分).pdf

    【Java Swing GUI组件技术】是Java程序设计中用于构建图形用户界面的重要工具。在这个课程设计实训项目中,学生被要求使用Java Swing库来创建一个课程选课系统的图形用户界面(GUI)。具体来说,主要涉及以下几个...

    java 实现简单的记事本程序

    2. **事件处理**:为了响应用户的操作,我们需要添加事件监听器。例如,我们可以使用`ActionListener`接口来处理按钮点击事件,当用户点击“打开”或“保存”时,对应的函数会被调用。 3. **文件I/O操作**:在...

    java swing综合程序

    在"Java Swing综合程序"中,你会学习如何布局这些组件,如何处理用户的交互事件,以及如何使用ActionListener和其他监听器来响应用户的操作。此外,你还会接触到布局管理器,如BorderLayout、GridLayout和FlowLayout...

    经典Java程序源代码

    这些程序示例不仅反映了Java编程语言在桌面应用程序开发中的应用,也揭示了面向对象编程(OOP)的核心概念,如类的继承、接口实现、事件处理机制,以及对用户输入和界面的响应。对于学习Java编程、了解Swing组件使用...

    Java定时关机小程序

    - **Eclipse工程**:Eclipse是一个流行的Java集成开发环境,用于编写、调试和打包Java应用。完成程序后,可以将其打包成JAR文件,便于用户下载和运行。 综上所述,实现Java定时关机小程序涉及多个Java核心概念和...

    java并发程序设计

    Java并发程序设计是Java编程技术中一个重要的领域,它涉及如何在多线程环境下编写有效且安全的代码。本文将从以下几个方面详细讲解Java并发程序设计的核心知识点: 1. 使用线程的经验:线程是并发程序的基础,包括...

    java写的小程序五子棋

    3. **事件监听**:为了响应用户的点击操作,我们需要添加事件监听器。例如,当用户点击棋盘上的某一点时,程序应能检测到这个事件,并在合适的位置放置棋子。 4. **二维数组表示棋盘**:可以用二维数组来存储棋盘的...

    JavaSwing桌面程序开发

    此外,JFrame还有`setDefaultCloseOperation()`方法用于设置窗口关闭时的操作,如默认的退出应用程序。`setTitle()`用于设置窗口标题,`setSize()`和`setLocation()`分别用于设定窗口的大小和位置。 Swing中的组件...

    JAVA名片管理系统

    开发者使用JDBC可以执行SQL语句、处理结果集、管理事务等,使得JAVA应用程序能够与数据库无缝集成。 5. **数据模型**:名片管理系统可能包含了用户、名片等实体的实体类,这些类封装了数据和相关操作,形成了对象化...

    Java 通讯录程序

    【Java 通讯录程序】是一个基于Java编程语言开发的可视化界面应用,主要用于管理和操作个人通讯录。这个程序包含了几个核心功能,包括联系人信息的添加、删除、修改、查询以及显示所有联系人信息。它旨在提供一个...

    JAVA的图形用户界面与事件处理

    事件处理是 Java 图形用户界面中的一个重要概念,指的是在用户与图形用户界面交互时,程序对用户操作的响应。事件处理包括事件的产生、事件的监听和事件的处理三个方面。在 Java 中,事件处理是通过 Listener 接口...

    简单的购物车Java程序代码

    此Java程序实现了一个简单的图形界面(GUI)购物车应用,用户可以通过点击按钮来添加商品到购物车,并在文本区域显示已选择的商品及其总价。 ### 2. 导入必要的包 程序开始通过导入`java.awt.*`和`java.awt.event....

    Java如何构建系统托盘图标程序

    总结来说,创建Java系统托盘图标程序涉及使用`TrayIcon`类、创建图标、构建弹出菜单、添加事件监听以及处理系统托盘事件。通过熟练掌握这些步骤,开发者可以让应用程序在后台静默运行,同时保持与用户的交互性,提高...

    java源码包---java 源码 大量 实例

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    Java画图板程序设计报告.pdf

    本报告详细介绍了 Java 画图板应用程序的设计与实现,涵盖了程序的总体设计、详细设计与实现、系统测试等方面。报告中首先介绍了程序的设计要求和环境,包括程序的功能需求、开发平台和工具等。然后,报告详细介绍了...

Global site tag (gtag.js) - Google Analytics