Java Swingworker : Not as encapsulated class

标签 java swingworker jtextarea jprogressbar

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

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

我想打印在 SwingWorker 的事件驱动线程中的 JTextArea 上处理的文件的名称作为更新进度条。网上的例子都是嵌套类,嵌套类访问外部类中的变量(比如done方法)。我还想向事件驱动线程发出信号,表明 SwingWorker 已完成,以便 EDT 可以执行启用“开始”按钮(和清除字段)等操作。

这是我的问题: 1. SwingWorker类如何将文本放入Event Driven Thread的JTextArea并更新一个进度条?

  1. EDT 如何确定{外部} SwingWorker 线程何时完成?

{我不希望将 SwingWorker 作为嵌套类,因为要完成大量代码(和处理)。

最佳答案

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

EDT 不确定工作人员何时完成:工作人员自己知道它已经完成工作,因为 doInBackground()方法结束。包装 worker 的代码检测到 doInBackground() 的完成。然后调用 done() EDT 上的方法。 (swing worker 自动为您处理线程中所有更改的能力是它如此优秀的原因之一。)

在你的done()实现,您可以通过观察者对象回调来通知您的 GUI 已完成 - 同样,您可以将某些内容传递给工作人员的构造函数。

查看此 tutorial on SwingWorker有关如何实现不同方法的说明。 progress bars 上的踪迹包括有关在 swing worker 中使用进度条的部分。

关于Java Swingworker : Not as encapsulated class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702513/

相关文章:

java - Chrome headless 不适用于特定配置文件,它正在选择随机默认配置文件

java - 如何将文本字段从主类传递到另一个类

java - 如何让 JTextArea 粘在窗口上

java - Java Swing 中 JTable 对应的 WPF .NET 组件是什么?

java - Hibernate、Oracle、Join Tables 和关键问题

java - 等待后台进程结束,并使用来自不同类的 SwingWorker

java - 使用 new 关键字从同一包内的类外部调用它时在框架内获取空文本区域

java - 通过单击 jbutton 将 jtextarea 中的元素添加到 jlist

java - 如何使用 JPAContainer DefaultQueryModifierDelegate 在 vaadin 容器中实现 GROUP BY?

java - 同步j进度条