有没有一种方法可以多次启动和停止SwingWorker?

3
我有一个开始和停止按钮。我被告知必须使用SwingWorker。现在的代码运行良好。我可以启动它并停止它。但是如果我想再次启动它呢?我看到doinBackground方法只会执行一次。是否有办法再次触发它?
目前,我无法创建Swing Worker的新实例,因为在我的Swing Worker中,我有一个while循环,其中while(isSet)设置为True时,单击开始按钮并在单击停止按钮时设置为False。
是否有解决方法?
谢谢
3个回答

7

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

SwingWorker只被设计成执行一次。多次执行SwingWorker将不会导致调用doInBackground方法两次。

SwingWorker API文档

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


1
我建议使用一个对象来封装SwingWorker。当按下“go”按钮时,该对象创建一个SwingWorker并启动它。当设置“stop”标志时,SwingWorker完成自身并告诉封装对象它已经完成。再次按下“go”按钮时,封装对象创建一个新的SwingWorker,以此类推。

这正是我想要做的。你能贴出一个代码示例吗?谢谢。 - Biggs
只是寻找一个非常基本的例子。谢谢。 - Biggs

0
每个SwingWorker都被设计为只执行一次,正如你所说的那样。在这方面,每个对象代表一个单独的执行。
因此,如果您确实想每次单击“开始”按钮时生成另一个操作的实例,那么一种有效(并且可能是最直接)的方法是为每个单击创建一个新的SwingWorker。

我做不到这个。当我点击开始按钮时,我在其中设置了一个布尔值。在doinBackground()方法中,我会循环某些内容,直到它被设置为false(也就是你按下停止按钮的时候)。如果我每次都创建一个新实例,我将不知道何时标记此布尔值。 - Biggs
DJClayworth....谢谢,我已经编辑了我的问题。你能给我提供一个基本的代码片段来说明你所指的内容吗?(即使用对象封装SwingWorker)..谢谢..! - Biggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接