一个完整的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应用程序,通常至少要有一个应用程序的结束点。对于一般程序来说,系统开发者根据需要和个人的偏好,会在程序结束位置,通过添加System.exit(0),或System.out(-1),来结束程序,或不加这些指令,让...
事件处理是 Java 图形用户界面中的一个重要概念,指的是在用户与图形用户界面交互时,程序对用户操作的响应。事件处理包括事件的产生、事件的监听和事件的处理三个方面。在 Java 中,事件处理是通过 Listener 接口...
【标题】"记事本设计 JAVA程序设计"揭示了这个项目是使用Java编程语言实现的一个类似...这个项目为初学者提供了一个实践Java GUI编程、文件操作和事件处理的好机会,同时也适合有一定经验的开发者进行功能增强和优化。
通过以上分析可以看出,这个Java程序是一个典型的GUI应用示例,它演示了如何使用AWT库创建简单的图形用户界面,同时实现了基本的数据输入、处理和显示功能。尽管代码较为简单,但它涵盖了GUI编程的基本要素,对于...
在这个Java实战项目中,我们将构建一个简单的计算器应用程序,利用Java Swing库来创建用户界面,并实现基本的数学运算功能。以下是一些关键知识点: 1. **Java Swing库**:Java Swing是Java Foundation Classes ...
在Java编程领域,GUI(图形用户界面)是创建桌面应用程序不可或缺的一部分。本示例程序"Java GUI简单程序"旨在教你如何构建一个基本的GUI界面,同时整合数据库连接、查询功能,并利用JTable来展示查询结果。这是一个...
首先,小应用程序(Applet)是Java中的一个概念,它是一段可以嵌入到HTML文件中并由Java浏览器支持的Java程序。这类程序通常用于动态网页内容的生成,比如在网页上显示动画或者执行某些交互功能。小应用程序是Applet...
1. **文件**菜单:可能包含“新建”、“打开”、“保存”、“另存为”、“退出”等选项,用于处理文件的创建、读取、存储以及关闭程序的操作。 2. **编辑**菜单:通常会有“复制”、“粘贴”、“剪切”、“撤销”、...
该Java程序主要实现了一个学生信息管理系统的功能,它能够支持学生信息的基本操作,如添加(Add)、删除(Delete)、修改(Update)等。此系统旨在帮助用户有效地管理和查询学生信息。 ## 二、核心功能与架构 ### ...
在这些事件处理方法中,我们可以使用`e.getX()`和`e.getY()`获取鼠标位置,然后根据需要在`Canvas`上绘制图形。例如,可以在`mousePressed`和`mouseReleased`事件之间记录鼠标移动路径,形成线条。 **添加鼠标事件...
在【标题】"经典java程序源代码"中,我们可以看到这是一个关于Java编程的学习资源,包含了加法器、小型记事本等小程序的源代码。这些示例程序可以帮助初学者更好地理解和实践Java编程语言的基本概念和组件。 首先,...
### Java版简易计算器程序设计知识点解析 #### 一、项目概述 本项目为一个简易计算器的设计与实现,采用Java语言开发。该计算器具备基本的算术运算功能,并且集成了记忆存储功能,能够满足日常计算的基本需求。项目...
在Java编程环境中,实现一个简单的记事本程序是一项常见的练习,它可以帮助初学者理解GUI(图形用户界面)设计、事件处理以及文件I/O操作。在这个项目中,我们将探讨以下几个核心知识点: 1. **Swing库**:Java ...
Java的GUI程序设计是Java应用程序开发中的一个重要领域,它允许开发者创建交互式的图形用户界面。在本实验中,我们将深入理解Java GUI的基本概念,并通过实际操作来熟悉其关键组件和事件处理机制。 首先,GUI...
除了命令行方式,你还可以编写shell脚本或使用工具如`nohup`或`screen`来后台运行Java程序,使其在用户退出终端后继续运行。例如: ```bash nohup java -jar myapp.jar & ``` 对于大型项目,通常会使用如`start-...
`:创建一个`BallFrame`实例,并将其设置为应用程序的主窗口。 - `frame.setVisible(true);`:使窗口可见。 #### 2. **`BallFrame` 类** 这是一个继承自`JFrame`的类,用于构建程序的主要框架。 - **构造函数**:...
【Java Swing GUI组件技术】是Java程序设计中用于构建图形用户界面的重要工具。在这个课程设计实训项目中,学生被要求使用Java Swing库来创建一个课程选课系统的图形用户界面(GUI)。具体来说,主要涉及以下几个...
Java交通灯程序是一种模拟现实生活中交通信号灯运作的软件应用,通常用于教学目的,帮助学生理解和实践面向对象编程、多线程以及事件处理等Java核心概念。在这个大学JAVA课的作业中,学生们被要求设计一个能够模拟...
- **异常处理**:在主类中添加对非法输入的异常处理,如非数字字符的输入,增强程序的健壮性。 - **用户界面**:考虑使用图形用户界面(GUI)替代控制台输入,提升用户体验。 - **多态性**:可以考虑将不同的运算...
Java语言程序设计是一个涵盖广泛的领域,本篇将主要聚焦于JAVA_08 AWT图形界面编程及JFC Swing部分的知识点。AWT(Abstract Window Toolkit...通过深入理解和实践,开发者能够创建出功能强大、界面友好的Java应用程序。