Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
请参阅Java语言变化,了解Java SE 9及其后续版本中更新的语言功能的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息。
当一个Swing程序需要执行一个长时间运行的任务时,通常会使用其中的一个工作线程,也称为后台线程。每个在工作线程上运行的任务由javax.swing.SwingWorker
的一个实例表示。 SwingWorker
本身是一个抽象类;您必须定义一个子类来创建一个SwingWorker
对象;匿名内部类通常用于创建非常简单的SwingWorker
对象。
SwingWorker
提供了一些通信和控制功能:
SwingWorker
子类可以定义一个方法done
,当后台任务完成时自动在事件分发线程上调用。SwingWorker
实现了java.util.concurrent.Future
。该接口允许后台任务向其他线程提供返回值。该接口中的其他方法允许取消后台任务并查看后台任务是否已完成或已取消。SwingWorker.publish
来提供中间结果,从而导致SwingWorker.process
从事件分发线程调用。这些功能在下面的小节中进行了讨论。
javax.swing.SwingWorker
类在Java SE 6中添加到Java平台。在此之前,还有一个同样称为SwingWorker
的类广泛用于相同的目的。旧的SwingWorker
不是Java平台规范的一部分,并且不作为JDK的一部分提供。
新的javax.swing.SwingWorker
是一个全新的类。它的功能不是旧的SwingWorker
的严格超集。两个类中具有相同功能的方法没有相同的名称。而旧的SwingWorker
类的实例是可重用的,而每个新的后台任务都需要一个新的javax.swing.SwingWorker
实例。
在Java教程中,任何提到SwingWorker
现在都指的是javax.swing.SwingWorker
。