2010-07-16 69 views
2

我有一个开始和停止按钮。我被告知我必须使用SwingWorker。我现在的代码工作正常。我开始并停止它。但是如果我想再次启动它呢?我读到doinBackground方法将只执行一次。有没有办法将它再次熄灭.. ??有没有办法多次启动和停止SwingWorker ..?

现在我不能创建一个Swing Worker的新实例,因为在我的Swing Worker中我有一个while循环,当while(isSet)被设置为True时,当我点击Start按钮时设置为False,当我点击停止按钮。

有没有解决这个问题的方法.. ??

谢谢

回答

5

的SwingWorker的API文档回答你的问题:

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

SwingWorker API docs

你需要每个启动按钮被按下时创建一个新的SwingWorker实例。

0

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

因此,一个有效的(也可能是最直接的)方法就是为每次单击开始按钮创建一个新的SwingWorker,如果您确实想要生成每个操作的实例时间。

+0

我不能这样做。当我点击开始按钮时,我在那里设置了一个布尔值。在doinBackground()方法中,我循环了一些东西,直到它被设置为false(当你点击停止按钮时)。如果我每次创建一个新实例,我都不知道这个布尔值何时被标记。 – Biggs 2010-07-16 16:17:59

+0

你应该编辑你的问题来解释这一点。 – DJClayworth 2010-07-16 16:32:56

+0

DJClayworth ....谢谢我编辑了我的问题。你能否给我提供你所指的基本代码片段..? (即有一个对象封装SwingWorker)..谢谢..! – Biggs 2010-07-16 18:59:55

1

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

+0

这听起来正是我想要做的。你可以发布这个代码示例.. ??谢谢 – Biggs 2010-07-16 17:06:13

+0

只是寻找一个非常基本的例子。谢谢 – Biggs 2010-07-16 18:01:25

相关问题