【问题标题】:Is there a way to Start and Stop a SwingWorker more than once..?有没有办法不止一次地启动和停止一个 SwingWorker..?
【发布时间】:2010-07-16 15:36:48
【问题描述】:

我有一个开始和停止按钮。有人告诉我必须使用 SwingWorker。我现在的代码工作正常。我开始它,我停止它。但是如果我想重新开始呢..?我正在阅读 doinBackground 方法只会执行一次。有没有办法再次将其关闭..??

现在我无法创建该 Swing Worker 的新实例,因为在我的 Swing Worker 中,我有一个 while 循环,当我单击“开始”按钮时它设置为 True,当我单击时设置为 False在停止按钮上。

有没有办法解决这个问题..??

谢谢

【问题讨论】:

    标签: java swingworker


    【解决方案1】:

    SwingWorker API 文档回答了您的问题:

    SwingWorker 仅设计为 执行一次。执行一个 SwingWorker 不止一次不会导致 调用 doInBackground 方法 两次。

    SwingWorker API docs

    每次按下开始按钮时,您都需要创建一个新的 SwingWorker 实例。

    【讨论】:

      【解决方案2】:

      我建议让一个对象封装 SwingWorker。当按下“开始”按钮时,让该对象创建一个 SwingWorker 并将其设置为开始。当设置“停止”标志时,让 SwingWorker 完成自身并告诉封装对象它已经完成。当再次按下“go”按钮时,封装对象会创建一个新的 SwingWorker,依此类推。

      【讨论】:

      • 这听起来正是我想做的。你可以发布一个这样的代码示例..?谢谢
      • 只是寻找一个非常基本的例子。谢谢
      【解决方案3】:

      正如您所说,每个 SwingWorker 都设计为执行一次。在这方面,每个对象都代表一次执行。

      因此,一种有效的(并且可能是最直接的)方法来完成您所追求的工作,如果您确实希望每次都生成另一个动作实例,则为每次单击开始按钮创建一个新的 SwingWorker .

      【讨论】:

      • 我不能这样做。当我单击开始按钮时,我在其中设置了一个布尔值。在 doinBackground() 方法中,我循环遍历某些内容,直到将其设置为 false(即当您按下停止按钮时)。如果我每次都创建一个新实例,我将不知道这个布尔值何时被标记。
      • DJClayworth....谢谢我已经编辑了我的问题。您能否向我提供您所指内容的基本代码片段......? (即有一个对象封装 SwingWorker).. 谢谢..!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2014-05-03
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2019-03-01
      相关资源
      最近更新 更多