Swing的线程机制
Swing是SUN推出的轻量级的开发用户界面的工具包,最初它的设计是在单线程环境下运行的,它的执行也是单线程的,这也就是为什么我们说Swing不是多线程安全的。所以为了编写交互性更高的UI界面,必须了解其内部的线程运行机制。
Swing程序往往包括了三种类型的线程,分别是:
1)初始化线程(Initial Thread)
2)事件调度线程(Event Dispatch Thread,EDT)
3)任务线程(Work Thread)
每个程序都从main方法开始执行,该方法一般运行在初始化线程上,初始化线程主要负责启动程序的UI界面,一旦UI界面启动完毕,初始化线程的工作便宣告结束。
每个Swing程序都会有一个EDT,EDT主要负责绘制和更新界面,并响应用户输入。每个EDT都会负责管理一个事件队列(EventQueue),而用户每次对界面更新的请求(包括键盘鼠标事件等)都会排到事件队列中,然后等待EDT的处理。
工作线程主要负责执行和界面无直接关系的耗时任务和输入/输出密集型操作,也即任何高染或延迟UI事件的处理都应该由任务线程来完成。
Swing编程中的注意点
在编写Swing程序的时候,必须注意:
1)不能从其他非EDT线程来访问UI组件和事件处理器,否则可能会使程序出现非线程安全问题。
2)不能在EDT中执行耗时任务,这会使得GUI事件被阻塞在队列中而得不到处理,使程序失去响应性。
如何正确地启动UI界面
错误的启动UI界面的方法
// 错误的启动UI界面的方法
public class MainFrame extends javax.swing.JFrame {
// ...
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
}
正确的启动UI界面的方法
// 正确的启动UI界面的方法
public class MainFrame extends javax.swing.JFrame {
// ...
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainFrame().setVisible(true);
}
});
}
}
关于SwingUtilities类
SwingUtilities提供了最常用的invokeAndWait()方法和invokeLater()方法,其他线程通过这两个方法可以将代码放到事件队列中,当EDT进入该代码块后,就开始执行,并对UI组件进行安全修改。这两个方法又有所区别,invokeLater()方法是异步的,即EDT将将事件放到队列中就返回;而invokeAndWait()方法是同步的,即EDT将事件放到队列中等到其Runnable执行完毕才返回,所以
注意绝对不能使用EDT来调用invokeAndWait()方法,否则会导致死锁发生
。
未完待续!
分享到:
相关推荐
进行概述,然后介绍数据类型、运算符和控制语句的基本概念,接着讲解该语言更复杂的特性,如类、方法、继承、接口、包、异常、多线程和泛型。 第二部分(第17~21章)介绍 Swing,首先对用 Swing 进行 GUI 编程进行...
Swing是Java标准库中的一个部分,主要用于构建桌面应用,它提供了丰富的组件和功能来创建美观的图形界面。 【描述分析】 描述部分"基于java的开发源码-版Swing星际争霸游戏源代码.zip"与标题一致,再次确认了压缩包...
本书是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、Javaean、Java安全模式、XML、注释、元数据等主题,同量...
书末附有两个附录,第一个附录提供了这些习题的答案,第二个附录则探究了Swing图形用户界面工具包中线程的使用情况以及它所涉及的线程相关API。 书中强调了正确使用Java线程API和并发工具的重要性,因为这不仅能...
本书是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、Javaean、Java安全模式、XML、注释、元数据等主题,同量...
multithread技术是Java语言中的一种多线程编程技术,能够提高程序的执行效率和响应速度。在网络聊天室的设计中, multithread技术可以用于处理多个用户之间的信息传输和处理。 五、案例分析 本文提供了一个基于...
本书是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时...
在Java AWT(Abstract Window Toolkit)和Swing库中,事件处理主要通过事件监听器来实现。事件是用户或系统进行的一些操作,例如鼠标点击、键盘输入或窗口关闭等。事件监听器是实现对这些事件做出响应的对象。 1. *...
在Java语言的教学过程中,任务实例探究是一种非常有效的学习方法,它可以帮助学生将理论知识与实际应用相结合,加深对编程概念的理解。"一个贯穿Java语言教学的任务实例探究.zip"压缩包中包含的PDF文档,很可能是为...
在这个项目中,开发者运用了Java的Swing库来构建用户界面,Swing是Java提供的一种轻量级的图形用户界面(GUI)工具包,能够帮助开发者创建美观且功能丰富的桌面应用程序。 Java的使用确保了系统的跨平台性,无论是...
在本实验项目“Java综合性实验-魔板游戏.zip”中,我们可以深入探讨一系列与Java编程相关的知识点,尤其是针对游戏开发的...同时,这也是一个很好的机会去探究如何将理论知识应用到实际项目中,从而加深对编程的理解。
本书是java 2技术权威指南,全面覆盖java 2技术的高级主题,包括:多线程、集合框架、网络api、数据库编程、分布式对象等,深入探究了swing、java 2d api、javabean、java安全模式、xml、注释、元数据等主题,同时...
- 使用Java Swing库创建用户界面,包括JFrame、JPanel等组件,实现棋盘的显示和棋子的落点选择。 - 事件监听机制:通过MouseListener和ActionListener接口处理用户的点击事件,响应棋子的放置。 3. **数据结构与...
- 探究泛型类和泛型方法,理解类型安全性和代码复用。 #### 第九周:GUI编程与事件驱动模型 - 使用Swing组件库开发图形用户界面。 - 掌握事件监听器模式,实现用户交互。 #### 第十周:文件I/O与XML解析 - 学习...
1. ASP.NET:ASP.NET是微软开发的Web应用程序框架,用于构建动态网站、Web应用和服务。设计题目可能包括但不限于: - 使用ASP.NET MVC或Web Forms开发企业级应用。 - 实现用户身份验证和授权系统。 - 利用Entity ...
例如,通过拼图游戏教授图形和图像类applet,使用信息管理系统项目讲解JDBC和Swing高级组件,通过网络聊天室项目学习多线程、IO流和网络编程,这样有助于学生掌握知识并理解其实际应用。 - 结合案例教学:在讲解...
在这个Java版本中,我们不仅能够享受到游戏的乐趣,更能深入探究其背后的编程原理和技术实现。下面,我们将对这款Java版坦克大战的源码进行分析,探讨其中涉及的多线程和图形界面技术。 首先,我们要理解Java语言在...
在这款Java小游戏的源代码中,我们可以深入探究GUI(图形用户界面)编程、事件处理、基本算法以及游戏逻辑的构建。 1. **GUI编程**:Java提供了多种库来创建GUI,其中最常用的是AWT(Abstract Window Toolkit)和...