GUI程序与Swing中的线程

开发 后端
本文介绍GUI程序与Swing中的线程,了解了Swing中的线程定义,能够让我们更好的写出优美的基于Swing的GUI程序。

Swing中的线程

Swing作为一个完整的UI解决方案,包含了一个GUI程序所拥有的方方面面,当然包括作为普通程序也好,作为GUI程序也好,作为Web程序等等程序都共有的线程概念。

Swing中的线程有三种:初始线程,事件线程,工作线程

这三种线程基本上包括了让一个GUI完美工作的方方面面,首先,初始线程被用来创建GUI组件、资源加载和启动GUI组件,众所周知,Swing是事件驱动的,所以当UI出现了之后,初始线程就完成了它的使命,并将接力棒交给了事件线程,Event Dispatch Thread,这个时候所有组件的事件行为都交给了这个线程去处理,当然我们自己也要需要用线程来运行许多任务,优秀的GUI程序是绝不能让界面被卡死不动的,那会让用户崩溃,所以这个时候就需要工作线程了,也可以说是在背后运行的线程,这种线程是劳动阶级,任劳任怨的执行者长时间的工作。

初始线程的写法很简单,这样就可以了:

  1. SwingUtilities.invokeLater(new Runnable() {  
  2.     public void run() {  
  3.         initGUI();  
  4.         showGUI();  
  5.     }  

但是Applet中,你可能需要调用SwingUtilities.invokeAndWait这个方法,要是init方法返回了,浏览器开始展现Applet,但是GUI的创建还在thread中,出错也是可想而知的。
至于invokeLater和invokeAndWait这两个线程的简单点的区别就是invokeLater是异步的,你不知道它什么时候会开始执行,invokeAndWait则是同步的,它会等到动作执行完成之后才返回。

Event Dispatch Thread不是线程安全的,所以要用线程来与它打交道要注意了,同步问题总是让人头痛。

在1.5之前应该说工作线程都是由开发人员自己去定义的,但是现在Swing推荐了SwingWorker这个类,包括Swing最新的符合JSR标准的Swing AppFramework也使用了SwingWorker这个类来处理所有在GUI背后做的事情。

了解了Swing中的线程定义,能够让我们更好的写出优美的基于Swing的GUI程序。

【编辑推荐】

  1. 不同Swing线程的模型设计
  2. AWT和Swing的可访问性
  3. Swing组件也是AWT的一部分
  4. 浅析iData技术与Swing关系
  5. 命令行输入改变Swing程序外观
责任编辑:佚名 来源: 千家综合布线网
相关推荐

2009-07-16 08:53:03

Swing任务Swing线程

2009-07-16 09:54:44

LookupEventSwing线程

2009-07-17 14:57:41

SwingWorkerSwing程序

2009-04-30 09:10:42

JavaSwing线程安全

2009-07-16 11:19:48

外部线程Swing组件

2009-07-15 15:35:59

Swing程序Swing性能

2011-06-22 15:42:18

QT 信号

2009-07-14 16:07:59

调用JavaFX代码Swing程序

2012-01-17 16:41:08

JavaSwing

2009-07-14 11:08:42

WebRendererSwing应用程序

2011-04-15 17:33:39

SWINGAWT

2009-07-14 11:30:15

Swing线程

2009-07-15 18:06:38

Swing线程

2009-07-15 16:03:26

Swing线程

2009-07-15 17:09:32

Swing线程

2012-06-20 14:07:28

多线程架构单线程

2009-07-17 16:09:29

Swing桌面应用程序

2009-07-10 15:18:48

Synth外观Swing外观

2011-06-14 14:57:06

QT Python GUI

2009-07-14 18:10:38

Swing应用程序框架
点赞
收藏

51CTO技术栈公众号