具体演示代码如下:/**********************************************************************************************************************************************************/package untitled14import 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("I'm going to end")fw.write("the application ended! " + (new Date()).toString())fw.close()}catch (IOException ex) {}}})}/***************************************************** 这是程序的入口,仅为演示,方法中的代码无关紧要***************************************************/所谓事件就是指发送给GUI系统的消息,该消息通知GUI系统某种事情已经发生,要求作出响应。事件根据来源可分为以下几种:
1.计算机输入输出设备产生的中断事件,如鼠标和键盘同GUI系统的交互 *** 作。这种事件是最原生的“底层”事件,一般都需要组件做深入处理,籍此触发更高抽象层次具有语义的逻辑事件。为GUI系统扩展自定义组件往往需要编写处理这些事件,派发高级逻辑事件。Swing中这些事件对应的有MouseEvent、KeyEvent等。
2.GUI系统触发的逻辑事件。这种事件是1中所提的原始事件经过组件的处理后发出的高级事件,比如Swing的JButton产生的ActionEvent。另外通知界面重绘的Paint事件也是高级逻辑事件,这种事件在接收到EXPOSE事件或系统显式调用repaint方法后触发的事件。
3.应用程序触发的事件。应用程序主动触发新事件可以有两种方式来进行,第一种是事件通过添加到系统事件队列进行派发。Swing中通过postEvent、repaint及invokeLater等方法,向系统事件队列添加事件。这种触发机制实质上是调度,触发事件的线程和事件派发线程可以不是同一个线程。事件被添加到系统事件队列后触发过程结束,而之后事件的处理要在事件派发线程上等待执行。第二种是通过调用组件的派发方法(Swing中是fireEventXXXX)触发。使用这种方法,事件对象不会被放到系统事件队列中去,而是直接传递给事件处理方法处理。它的触发机制实质上是函数调用。这种事件触发方式要求事件处理线程必须同时是事件派发线程。
评论列表(0条)