我有以下代码......
runNow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final Search s = (Search) node.getUserObject();
// Swing worker
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
s.run();
return null;
}
@Override
public void done() {
window.updateResultsPanel(s.getResults(), s.getName());
}
};
worker.run();
}
});
这是一个弹出菜单操作,它应该创建一个新的SwingWorker,释放GUI,做一些工作,然后更新窗口的结果。但是,现在当我单击菜单项时,GUI会被锁定,直到工作完成,这是令人困惑的,使用SwingWorker的重点是不会发生。
任何关于我做错事的想法都将不胜感激。
-Cody
答案 0 :(得分:4)
您应该致电SwingWorker#execute
来启动工作人员,而不是run
运行由Runnable
接口公开,但执行实际上会安排工作人员在将来的某个时间运行。
答案 1 :(得分:1)
必须将方法SwingWorker.run()
更改为SwingWorker.execute()
,它就像魅力一样。