代码之家  ›  专栏  ›  技术社区  ›  Thomas Matthews

Java Swingworker:不是封装类

  •  3
  • Thomas Matthews  · 技术社区  · 16 年前

    我在传递信息、更新进度和指示SwingWorker类“完成”时遇到问题 不是封装类 .

    我有一个简单的类来处理硬盘上的文件和目录。用户单击Start按钮,启动SwingWorker的一个实例。

    done 方法)。我还想通知事件驱动线程SwingWorker已完成,以便EDT可以执行诸如启用Start按钮(和清除字段)之类的操作。

    以下是我的问题: 1.SwingWorker类如何将文本放入事件驱动线程的JTextArea并更新进度条?

    1. EDT如何确定{ 外部的

    { 我不希望SwingWorker作为一个嵌套类,因为已经完成了很多代码(和处理)。 }

    1 回复  |  直到 16 年前
        1
  •  2
  •   Ash    16 年前

    A. SwingWorker 仍然是一个类,您可以扩展并传入它执行其任务所需的任何信息,无论它是否封装在另一个类中。所以你可以通过考试 JTextArea 作为构造函数中的“目标文本区域”,将其存储为成员变量,然后更新 process(List<V>) 方法。

    doInBackground() 方法完成。包装worker的代码检测 然后调用 done() EDT上的方法(swing worker自动处理线程中所有更改的能力是使它如此优秀的原因之一。)

    在你的 实现您可以通过一个观察器对象回调来通知您的GUI完成—同样,您可以传递给worker的构造函数。

    tutorial on SwingWorker 对于如何弹劾不同方法的描述。路上的痕迹 progress bars 包括有关在swing worker中使用进度条的部分。