工作线程和 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