JavaSwingAwt高级事件机制.ppt
《JavaSwingAwt高级事件机制.ppt》由会员分享,可在线阅读,更多相关《JavaSwingAwt高级事件机制.ppt(34页珍藏版)》请在三一办公上搜索。
1、Tektronix(China)Co.,LTD NO.1,Java Swing&AWT高级事件机制,Haojun RenTektronix2011.09,Tektronix(China)Co.,LTD NO.2,引子:一个故事,这是一个封闭的且非常注重安全的城市外界沟通的渠道只有一个单向环形高速公路任何物资运输必须通过卡车单向运输 到另一个点这个城市从外界(森林和河流)获取 木材和水等通过自来水厂和木材厂加工成自来水 和家具并将这些产品运输给居民或学校使用某一种特供物资必须由一种高性能,速度极快的卡车运输,且一刻都不能 耽误,Tektronix(China)Co.,LTD NO.3,引子:一个
2、故事,开始一切都很正常,直到有一天有个质量不好的卡车出发了,半路严重抛锚,司机下来修车。但是这车太难修,一修就是几天,结果后面的汽车无法前进,各种物资无法按时运到目的地,最严重的是,有若干辆运送特供物资的卡车也被堵着市民急了,市长急了,但没有任何解决办法,于是城市暂时瘫痪了经过这次教训,市政府决议,“由于堵车情况无法避免,但运送特供物资的卡车是无论如何不能耽误”,于是给出三个解决方案,Tektronix(China)Co.,LTD NO.4,引子:一个故事,解决方案:开辟一条新的运输线路,来行驶质量不好的卡车,其他好卡车不小心驶到这条运输线路的时候,交警会指挥把它们强制驶回单向环形高速公路质量
3、不好的卡车一旦抛锚,交警会指挥首先让其他好卡车先通过,在其他好卡车通过之前,它不能做修理这个问题很棘手,交给专业公司外包解决,Tektronix(China)Co.,LTD NO.5,Java 进程与线程,Java进程(Process)一种于自身定址空间中执行的独立程序。所谓多工(Multitasking)操作系统,会周期性的将CPU时间划分给每个进程,使操作系统得以同时执行一个以上的进程,并让每一个进程都像独立运作一样Java线程(Thread)Java线程(Thread)是进程(Process)中的一个“单一连续控制流程”(A single sequenctial flow of cont
4、rol)。一个进程(Process)可拥有多个并行(Concurrently)的线程,Tektronix(China)Co.,LTD NO.6,Java 进程,当Swing界面程序启动后,虚拟机(JVM)会启动3个线程主线程Swing事件派发线程EDT(Event-dispatching thread)系统工具包线程,Tektronix(China)Co.,LTD NO.7,主线程,通常意义下的Java线程,该线程从Java进程启动到终止,贯穿始终例如:一个Java应用程序(进程)启动,通过main方法,主线程创建并启动;通过System.exit方法,主线程销毁,进程结束,Tektronix
5、(China)Co.,LTD NO.8,GUI系统的事件模型,事件派发线程(Event-dispatching thread)和事件处理线程单线程模型-事件的派发线程和处理线程是同一线程-事件从事件队列中取出之后,立即在当前线程中处理,处理完后才取下一个事件继续循环。在同一线程中完成事件派发和组件的模型数据处理(更新界面)多线程模型-事件的派发线程和处理线程是分别不同一线程-事件派发线程负责从事件队列中获取事件-事情处理线程负责组件的模型数据的处理-当获取到新的事件后,它会启动新的事件处理线程,并将事件交由此线程处理,之后派发线程并不等待事件处理线程完成,而是立即获取下个事件进行派发,Tekt
6、ronix(China)Co.,LTD NO.9,GUI系统的事件模型,Tektronix(China)Co.,LTD NO.10,GUI系统的事件模型 多线程模型,存在多个处理线程同时处理,可能产生同步问题-程序数据的同步出现问题-组件的数据模型产生同步问题GUI系统来说必须考虑组件的外观同其数据模型一致需要采用复杂的同步机制来保持数据模型的同步,对于系统的开发者和应用开发者来说都是很高的要求该模型很少被现有的GUI系统采用,Tektronix(China)Co.,LTD NO.11,GUI系统的事件模型 单线程模型,事件处理线性且处理顺序固定,避免同步问题缺陷是线程独占为了避免长时间事件处
7、理占据线程,应用程序往往在事件处理方法中启动其他线程来完成事件的处理,而将事件派发线程留给耗时短的事件处理为了保证界面的一致性,使用单线程模型GUI系统的应用需要将对组件的操作放在事件派发线程上完成,毕竟组件的操作(主要是刷新)是耗时短暂的,Tektronix(China)Co.,LTD NO.12,GUI系统的事件模型 Awt和Swing单线程模型,Awt和Swing组件操作是非线程安全的,因为几乎所有的组件操作方法都未做同步处理,所以不建议采用多线程。(怎么实现对组件操作方法的同步处理?)Awt组件操作是线程安全的,因为它内部采用许多复杂的同步机制来完成这个操作Swing和Swt的不同是S
8、wt在运行时检查组件操作是否在派发线程上,如果不是则抛出异常警告,而Swing则需要程序员自己做控制 SwingUtilities.isEventDispatchThread(),判断当前线程是否是Awt事件派发线程,Tektronix(China)Co.,LTD NO.13,GUI系统的事件模型 Awt和Swing单线程模型,这是一个封闭的且非常注重安全(线程安全)的城市(用户界面)外界沟通的渠道只有一个单向环形高速公路(事件队列循环)任何物资运输必须通过车辆(各种事件)单向运输到另一个点这个城市从外界(森林和河流)获取 木材和水等(鼠标、键盘等原生事件)通过自来水厂和木材厂(各种组件)加工
9、成自来水和家具(逻辑事件)并将这些产品运输给居民或学校(消费逻辑事件的事件处理器)使用某一种特供物资(响应界面绘制)必 须由一种高性能,速度极快的卡车(repaint)运输,且一刻都不能耽误,Tektronix(China)Co.,LTD NO.14,GUI系统的事件模型 Awt和Swing单线程模型,开始一切都很正常,直到有一天有个质量不好的卡车(耗时性长事务)出发了,半路严重抛锚,司机下来修车。但是这车太难修,一修就是几天(长耗时,且线程独占),结果后面的汽车(事件)无法前进,各种物资无法按时运到目的地(堵塞),最严重的是,有若干辆运送特供物资的paint(响应界面绘制)的卡车也被堵着市民
10、急了,市长急了,但没有任何解决办法,于是城市暂时(用户界面)瘫痪(失去响应,灰框Gray Rectangle)了经过这次教训,市政府(事件派发线程)决议,“由于堵车情况无法避免,但运送特供物资的paint(响应界面绘制)卡车是无论如何不能耽误”,于是给出三个解决方案,哪三个?,Tektronix(China)Co.,LTD NO.15,GUI系统的事件模型 Awt和Swing单线程模型,解决方案:开辟一条新的运输线路(非EDT线程),来行驶质量不好的卡车(耗时性长事务),其他好卡车(特别是paint 的卡车)不小心驶到这条运输线路的时候,交警会指挥把它们强制驶回单向环形高速公路(事件队列循环)
11、-InvokeLater质量不好的卡车(耗时性长事务)一旦抛锚,交警会指挥首先让其他好卡车先通过,在其他好卡车通过之前,它不能做修理(被EDT线程堵塞,等待返回)-InvokeAndWait这个问题很棘手,交给专业公司外包解决(SwingWorker),Tektronix(China)Co.,LTD NO.16,Swing事件派发线程EDT(Event-dispatching thread),负责把事件队列里的事件派发到相应组件上,并调用绘制方法更新界面事件(Event)事件队列(EventQueue)事件派发线程EDT,Tektronix(China)Co.,LTD NO.17,事件(Eve
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaSwingAwt 高级 事件 机制

链接地址:https://www.31ppt.com/p-5825425.html