swing中的线程

Posted TaoLeonis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swing中的线程相关的知识,希望对你有一定的参考价值。

1. 初始化线程
初始化线程用于创建各种容器,组件并显示他们,一旦创建并显示,初始化线程的任务就结束了。

2. 事件调度线程(单线程:只有一个线程在负责事件的响应工作。)
通过事件监听的学习,我们了解到Swing是一个事件驱动的模型,所有和事件相关的操作都放是放在事件调度线程 (Event Dispatch)中进行的。
比如点击一个按钮,对应的ActionListener.actionPerformed 方法中的代码,就是在事件调度线程 Event Dispatch Thread中执行的。

3. 长耗时任务线程
有时候需要进行一些长时间的操作,比如访问数据库,文件复制,连接网络,统计文件总数等等。 这些操作就不适合放在事件调度线程中进行,
因为占用时间久了,会让使用者感觉界面响应很卡顿。 为了保持界面响应的流畅性,所有长耗时任务都应该放在专门的 长耗时任务线程中进行
为了解决这个问题,Swing提供了一个SwingWorker类来解决。 SwingWorker是一个抽象类,为了使用,必须实现方法 doInBackground,
在doInBackground中,就可以编写我们的任务,然后执行SwingWorker的execute方法,放在专门的工作线程中去运行。
SwingWorker worker = new SwingWorker() {
protected Object doInBackground() throws Exception {
//长耗时任务
return null;
}
};
worker.execute();


eg: SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestFrame().setVisible(true);// 这段代码就是在事件调度线程中执行了
}
});

以上是关于swing中的线程的主要内容,如果未能解决你的问题,请参考以下文章

由java中的另一个线程刷新GUI(swing)

Swing:关于Java界面编程的第一课,如何正确的处理界面中的线程

Java开发中的线程安全选择与SwingUtilities类的invokeLater()或invokeAndWait()

Java:Swing 库和线程安全

转Swing 与EDT线程

Java 的 Swing 线程