当运行GUI小程序(Applet)或应用程序(Application)时,main()方法中的代码会
建立一个GUI并设置事件句柄.当调用Frame,Dialog,Window的setVisible(true)或
浏览器显示Applet时,我们就是在和GUI交互.
问题是你的main()可能不会只停留在用户界面上,它可能会作一些其他方法.比
如计算
PI直到小数点后40000位.如果用户在和GUI交互之前要等待一段漫长的时间的话,
他们可能就会退出。
所以AWT库实现了监控GUI交互的线程.这个线程实际上就是循环检查系统事件队
列(System Event Queue)是否有鼠标点击,键盘按下或其他系统事件(也可以把自
己的事件加入系统事件队列,这就是将在下一片中提到的).这个线程就是事件分发
线程(Event Dispatch Thread),它是java.awt.EventDispatchThread的一个实例
.事件分发线程是Swing和AWT中最重要的,在绘制,更新和显示组件和受控的应用程
序方面扮演这关键的角色.和这个线程紧密相关的是一个FIFO事件的队列----系统
事件队列,它是java.awt.EventQueue的一个实例.每个事件都是按顺序一个一个的
执行的,这是为了避免在组件重绘的过程中组件的状态发生变化.我们一定要小心
不要再事件分发线程之外分发一个事件.例如,在另外执行的线程中直接调用fire
XX()方法是不安全的.另外,应当尽量使事件句柄和绘制方法尽可能的短小精悍,否
则系统的反应会变得不灵敏,有些时候甚至看起来象是死机了.
事件分发线程(Event Dispatch Thread)从系统事件队列取出并检测对其采取何
种处理.如果是对一个组件的点击,就为这个组件调用处理句柄.接下来,那个组件
再发送其他事件.例如,