【发布时间】:2022-01-31 08:56:03
【问题描述】:
我创建了一个 Swing GUI 应用程序来在后台执行所有长时间运行的任务,方法是将它们放入 SwingWorker 的子类中,效果很好。现在我想在所有后端系统发生真正的变化之前添加一些“试运行”功能。为此,我在 SwingWorker 中添加了一个布尔属性,并希望运行一次 true,一次运行 false。
在实践中,根据设计a Swing worker can only be used once。
这样重复使用是不可能的。但是如果我希望能够多次运行该野兽,我应该如何实现该应用程序?继承 SwingWorker 是否有意义,或者使用策略模式所以我的代码是 SwingWorker 刚刚触发的策略?不知何故,我觉得所有的 doInBackground/publish/process/done 模式都会失去意义。
【问题讨论】:
-
为什么要多次使用swing worker?你可以使用另一个类和你在 SwingWorker 中调用的运行/执行方法吗?
-
这将是策略模式,不是吗?这种模式是否必须复制 SwingWorker 接口中的所有方法?
-
我不会将其称为策略模式或使用“触发器”一词。您有一个包含数据的类,并且您运行修改该数据的方法。这是基本的 OOP。
-
SwingWorker 的特殊之处在于它使 UI 保持最新。如果我必须自己用另一个类来实现它,那么使用 SwingWorker 根本没有意义。
-
你是在谈论组合而不是继承?你有一个类和一个关联的 SwingWorker ( composition ),而不是子类化 SwingWorker (inheret)。我认为你所做的无论如何都超出了 SwingWorker 的范围。你甚至可以考虑一个执行者并使用期货。
标签: java swing swingworker