我有一个扩展 SwingWorker<Void, Void>
的类。在它的后台线程中,如果成功更改布局并向框架添加新面板,我应该登录。因此 Swing Worker 执行以下 3 项任务:
- 登录
- 更改布局
- 添加/删除面板。
所以我在 doInBackground() 方法中编写了这个函数。但是这里发生的情况是,无论登录成功与否,这3个方法总是被执行。如果登录失败,我想停止执行工作程序。我尝试了 cancel() 方法,但没有成功。我怎样才能以正确的方式做到这一点? 在 SwingWorker 中执行登录任务的正确方法是什么?
最佳答案
第二步和第三步不得在 doInBackground()
中完成方法,因为它们使用 Swing 组件,因此必须在事件调度线程中完成。它们必须在 done()
中完成方法,如果登录成功。
所以你的 SwingWorker 应该是 SwingWorker<Boolean, Void>
。 doInBackground()
如果登录成功,该方法应返回 true,否则返回 false:
SwingWorker<Boolean, Void> loginWorker = new SwingWorker<Boolean, Void>() {
protected Boolean doInBackground() {
return login();
}
protected void done() {
try {
boolean loginSuccessful = get();
if (loginSuccessful) {
updateGUI();
}
}
catch (Exception e) {
displayErrorMessage(e);
}
}
};
关于java - 登录 SwingWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11735903/