随笔 - 18  文章 - 96  trackbacks - 0
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678


常用链接

留言簿(4)

随笔档案

相册

我的兄弟们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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

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

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

初始线程的写法很简单,这样就可以了:
SwingUtilities.invokeLater(new Runnable() {
    
public void run() {
        initGUI();
        showGUI();
    }
}

但是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程序。

posted on 2007-11-04 12:40 ruislan 阅读(1246) 评论(2)  编辑  收藏

FeedBack:
# re: Swing中的线程[未登录] 2007-11-04 13:56 diego
5D壁纸, http://5d6p.5d6d.com 中国最好的壁纸论坛  回复  更多评论
  
# re: Swing中的线程 2007-11-04 22:27 sitinspring
留个记号先.  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: