工作线程和 SwingWorker
当 Swing 程序需要执行 Long 时间运行的任务时,它通常使用辅助线程之一,也称为后台线程。在工作线程上运行的每个任务都由javax.swing.SwingWorker实例表示。 SwingWorker
本身是一个抽象类;您必须定义一个子类才能创建SwingWorker
对象;匿名内部类通常对于创建非常简单的SwingWorker
对象很有用。
SwingWorker
提供了许多通信和控制功能:
-
SwingWorker
子类可以定义方法done
,当后台任务完成时,该方法将在事件分发线程上自动调用。 -
SwingWorker
实现java.util.concurrent.Future。该interface允许后台任务向另一个线程提供返回值。此interface中的其他方法允许取消后台任务,并发现后台任务是已完成还是已取消。 -
后台任务可以通过调用
SwingWorker.publish
来提供中间结果,从而导致从事件分派线程中调用SwingWorker.process
。 -
后台任务可以定义绑定属性。对这些属性的更改将触发事件,从而导致在事件分发线程上调用事件处理方法。
这些功能将在以下小节中讨论。
Note:
javax.swing.SwingWorker
类已添加到 Java SE 6 中的 Java 平台中。在此之前,另一个类也称为SwingWorker
,被广泛用于某些相同的 Object。旧的SwingWorker
不是 Java 平台规范的一部分,并且未作为 JDK 的一部分提供。
新的javax.swing.SwingWorker
是一个全新的类。它的功能不是旧SwingWorker
的严格超集。两个类中具有相同功能的方法没有相同的名称。同样,旧SwingWorker
类的实例是可重用的,而每个新的后台任务都需要javax.swing.SwingWorker
的新实例。
在整个 Java 教程中,对SwingWorker
的任何提及现在都是指javax.swing.SwingWorker
。