gpt4 book ai didi

Java Swingworker : Not as encapsulated class

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:31 24 4
gpt4 key购买 nike

我在使用 不是封装类 的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com