- 浏览: 170513 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (159)
- java常用 (28)
- Spring Security (0)
- tomcat (2)
- orcale (4)
- rmi (6)
- jvm (5)
- html (0)
- hibernate (0)
- javascript (5)
- log4j (5)
- struts (5)
- jdbc (0)
- jquery (0)
- json (0)
- jstl (0)
- jboss (0)
- JCaptcha (0)
- jpa (0)
- oscache (0)
- 项目管理 (8)
- ExtJs (10)
- 设计模式 (3)
- jsp (3)
- 错误归档 (1)
- maven (5)
- java多线程 (10)
- quartz (4)
- spring (9)
- memcache (3)
- java笔试面试 (3)
- xml (3)
- hadoop (5)
- velocity (2)
- jetty (3)
- http (1)
- linux (2)
- hbase (2)
- mysql (12)
- mybatis (8)
- web安全 (1)
- hive (2)
- 其他 (1)
最新评论
一个完整的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性能优化技巧
2013-03-30 11:19 709Java性能优化技巧 在JAVA程序中,性能问题的大部分原 ... -
java内部类的作用
2013-03-30 11:06 720java内部类的作用一、 ... -
StringTokenizer 用法
2013-03-25 09:29 1250StringTokenizer是一个用来分隔String的应 ... -
Java日志框架
2013-03-17 17:17 880Java日志框架 Log4j Ap ... -
java nio Buffer 中 compact的作用
2013-03-12 17:29 1664java nio Buffer 中 compact的作用 ... -
java annotation 入门
2013-03-11 11:23 728一. 最常见的annotation@Override:用在方法 ... -
Java中assert关键字的实现
2013-03-08 17:12 1036Java中assert关键字的实现 J2SE 1.4 ... -
java正则表达式
2013-03-07 08:42 650众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判 ... -
java对cookie的操作
2013-03-10 10:31 786java对cookie的操作 java对cookie的操 ... -
eclipse中的.project 和 .classpath文件的具体作用
2013-02-27 16:38 665eclipse中的.project 和 .cla ... -
Java中Split函数的用法技巧
2013-02-25 13:48 1558Java中Split函数的用法 ... -
如何把安全证书导入到java中的cacerts证书库
2013-02-21 11:21 1917如何把安全证书导入到java中的cacerts证书库 在项 ... -
java Comparable Comparator 接口
2013-02-19 15:58 7511.什么是Comparable接口 此接口强行对实现它的每 ... -
java环境变量配置
2012-08-28 21:51 686java环境变量配置 windows xp下配置JDK环 ... -
java 读取 doc poi读取word中的表.txt
2012-08-22 20:34 1704import java.io.File; import j ... -
java压缩和解压缩例子
2012-08-21 21:26 1042java压缩和解压缩例子 压缩时,在压缩文件夹中新建目录,en ... -
Java反射,根据类名创建带参数的实例
2012-08-21 21:26 2182public Object dynCreateClassIns ... -
java异常时如何执行
2012-08-21 21:26 642代码如下: public class Test{ publi ... -
java 读写txt文件
2012-08-21 21:27 856java 读写txt文件 读取 ... -
Java transient关键字
2012-08-21 21:27 654Java transient关键字 Volatile修饰的成员 ...
相关推荐
一个完整的Java应用程序,通常至少要有一个应用程序的结束点。对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让...
退选课程按钮:removeCourseButton 5) 退出系统按钮:exitSystemButton (3)修改后的结果如下 4、为 5 个按钮添加事件响应 (1)Action 事件 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...
14.12.3按钮响应事件556 14.12.4对话框的显示557 14.12.5返回用户选择的字体557 14.12.6如何使用字体选择对话框557 14.13GUI程序设计实例4——记事本558 14.13.1增加弹出式菜单558 14.13.2“退出”菜单的响应...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...
如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion...
exit.setToolTipText("退出象棋程序程序"); repent = new JButton(" 悔 棋 "); repent.setToolTipText("返回到上次走棋的位置"); //把组件添加到工具栏 jmain.setLayout(new GridLayout(0,4)); jmain.add(a...
- 2008-7-5 修正选择文件窗口的卡屏问题 修正无法读取系统锁文件时抛出异常的问题 修正退出的顺序问题 加入了好看的Win32启动程序 加入自动播放的功能 添加右键删除的功能(右键双击删除文件)...
请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一...
3. 鼠标或键盘事件响应模块的功能; 4. 可选难度等级功能; 5. 输赢自动判别功能; 6. 游戏背景选择功能; 7. 游戏积分功能; 8. 游戏分数排名功能; 9. 游戏图片更换功能,并且可以自定义图片; 10. 进行游戏同时...
如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion...
经过1星期的努力,BeoPlayer Java版本终于稳定下来了, 究竟怎么样,就等你亲自尝试了,相信你一定不会失望的,个性,简洁,优美,是BeoPlayer的创作宗旨,千万不要错过 更新日志: -- 2008-7-6 ** 修正播放列表...