【问题标题】:Reuse Java SwingWorker, or how to design the application?重用Java SwingWorker,或者如何设计应用程序?
【发布时间】: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


【解决方案1】:

在试运行上花了更多的心思之后,这个功能可能不是我想要的。 再次运行相同的功能,仅仅一分钟后可能会导致不同的动作:后端系统的状态不需要那么稳定,因此在空运行中显示的要触摸的记录不必是实际运行中触摸的记录。

所以我想我将创建一个“试运行”功能来检查后端系统并制定计划。如果用户愿意,该计划就会被执行。

由于这是两个不同的操作,我无论如何都不能使用同一个 SwingWorker。我将使用一个来创建计划,另一个来执行计划。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多