`

为您的Java应用程序添加退出事件处理

阅读更多

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

如:下列典型代码

packageuntitled14;

/***//**
*Thisapplicationistodemohowanapplcationend
*/

publicclassTest...{
publicTest()...{
}

publicstaticvoidmain(String[]args)...{
Testtest1
=newTest();
//.................
System.out.println("helloworld");
//Dosomethingbeforesystemexit
System.exit(0);//也可以不写这句代码,让程序自然结束。

}

}


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

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

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

/***//*****************************************************************************
本程序仅演示,如何在Java应用程序中添加系统退出事件处理机制
****************************************************************************
*/

packageuntitled14;
importjava.util.*;
importjava.io.*;

/***//**
*Thisapplicationisusedtodemohowtohooktheeventofanapplication
*/

publicclassUntitled1...{

publicUntitled1()...{
doShutDownWork();

}


/***//***************************************************************************
*Thisistherightworkthatwilldobeforethesystemshutdown
*这里为了演示,为应用程序的退出增加了一个事件处理,
*当应用程序退出时候,将程序退出的日期写入d: .log文件
*************************************************************************
*/

privatevoiddoShutDownWork()...{
Runtime.getRuntime().addShutdownHook(
newThread()...{

publicvoidrun()...{
try...{
FileWriterfw
=newFileWriter("d:\t.log");
System.out.println(
"I'mgoingtoend");
fw.write(
"theapplicationended!"+(newDate()).toString());
fw.close();
}

catch(IOExceptionex)...{
}


}

}
);
}

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

publicstaticvoidmain(String[]args)...{
Untitled1untitled11
=newUntitled1();
longs=System.currentTimeMillis();
for(inti=0;i<1000000000;i++)...{
//在这里增添您需要处理代码

}

longse=System.currentTimeMillis();

System.out.println(se
-s);
}

}


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

分享到:
评论

相关推荐

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

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

    java Socket实现聊天程序

    ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。 Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。 Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。 ...

    java程序双击运行-双击jar文件运行程序.pdf

    java程序双击运⾏_双击jar⽂件运⾏程序 Java应⽤程序jar⽂件可以由 JVM(Java虚拟机)直接执⾏,只要操作系统安装了JVM便可以运⾏作为Java应⽤程序的jar⽂件。可是,很多 朋友遇到⼀个难题,那就是下载了jar⽂件以后在...

    Java聊天室程序源码(毕业设计)

    ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。 Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。 Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。 ...

    Java Web程序设计教程

    &lt;&lt;Java Web程序设计教程.pdf&gt;&gt;人民邮电出版社的教程哦,所以,好书,你懂的!! 第1章web应用开发简介 1 1.1何为web应用 1 1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象...

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

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

    JAVA上百实例源码以及开源项目源代码

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

    JAVA上百实例源码以及开源项目

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

    java源码包2

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

    java源码包4

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

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

    退选课程按钮:removeCourseButton 5) 退出系统按钮:exitSystemButton (3)修改后的结果如下 4、为 5 个按钮添加事件响应 (1)Action 事件 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室...

    Java聊天室程序源码

    ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。 Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。 Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。 ...

    java源码包3

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

    通过Java语言操作数据库程序

    1、从键盘输入操作指令,例如0表示退出、1表示查询、2表示添加、3表示修改、4表示删除; 2、查询时显示所有记录 3、添加时从键盘输入添加的内容 4、修改时从键盘输入关键字和要修改的内容 5、删除时从键盘输入关键字

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    Java学生图书信息管理小程序 附代码.rar

    Java版编写的学生信息管理小程序 附代码,从代码看上去,本代码似乎没有使用数据库,数据库用文本代替了,把学生信息存入文件,对StudentSetOfBook文件处理,UI方面,包括了管理员管理界面、学生管理界面、判断进入...

    Java聊天室程序(源代码)

    ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。 Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。 Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。 ...

    java写字板简单程序代码

    其中文件菜单有新建、打开、保存、另存为、退出等功能;编辑菜单有剪切、复制、粘贴、等功能;格式菜单含有对文字字体、字型、字号及颜色等的设置功能,根据情况可在编辑菜单添加查找和查找替换功能。 2. 编辑区...

    基于Java面向对象程序设计课程报告.doc.doc

    本设计是为检验面向对象程序设计课程的知识运用而进行的实践,其 主要目的是采用面向对象的思想,独立完成程序的各个过程,并在实践中应用学到的关 于Java类与对象,接口,包,异常处理,多线程,事件处理及各类流的...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

Global site tag (gtag.js) - Google Analytics