我有一个开始和停止按钮。有人告诉我必须使用 SwingWorker。我现在的代码工作正常。我开始它,我停止它。但是如果我想重新开始呢..?我正在阅读 doinBackground 方法只会执行一次。有没有办法再次将其关闭..??
现在我无法创建该 Swing Worker 的新实例,因为在我的 Swing Worker 中,我有一个 while 循环说 while(isSet) 当我单击开始按钮时设置为 True,当我单击停止时设置为 False按钮。
有没有解决的办法..??
谢谢
我有一个开始和停止按钮。有人告诉我必须使用 SwingWorker。我现在的代码工作正常。我开始它,我停止它。但是如果我想重新开始呢..?我正在阅读 doinBackground 方法只会执行一次。有没有办法再次将其关闭..??
现在我无法创建该 Swing Worker 的新实例,因为在我的 Swing Worker 中,我有一个 while 循环说 while(isSet) 当我单击开始按钮时设置为 True,当我单击停止时设置为 False按钮。
有没有解决的办法..??
谢谢
SwingWorker API 文档回答了您的问题:
SwingWorker 仅设计为执行一次。多次执行 SwingWorker 不会导致调用 doInBackground 方法两次。
每次按下开始按钮时,您都需要创建一个新的 SwingWorker 实例。
我建议让一个对象封装 SwingWorker。当按下“开始”按钮时,让该对象创建一个 SwingWorker 并将其设置为开始。当设置“停止”标志时,让 SwingWorker 完成自身并告诉封装对象它已经完成。当再次按下“go”按钮时,封装对象会创建一个新的 SwingWorker,依此类推。
正如您所说,每个 SwingWorker 都设计为执行一次。在这方面,每个对象都代表一次执行。
因此,如果您确实想每次都生成另一个动作实例,那么一种有效的(并且可能是最直接的)方法就是为每次单击开始按钮创建一个新的 SwingWorker。