我希望在SwingWorker线程运行时禁用GUI的多个按钮/菜单项。单击按钮时会启动该线程。
我的代码中的while循环看起来会导致CPU负载显着增加。我是否对如何确定SwingWorker线程是否仍在运行有误?
当我更新SwingWorker线程中的按钮/菜单项时,CPU负载肯定会降低。但是,我觉得这不应该是SwingWorker线程的工作。应该吗?
JButton button = new JButton("Start");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
menu.setEnabled(false);
MySwingWorker worker = new MySwingWorker();
worker.execute();
while (true) {
if (worker.isCancelled() || worker.isDone()) {
menu.setEnabled(true);
break;
}
}
}
});
t.start();
}
});
答案 0 :(得分:1)
应在event dispatch thread(EDT)上构建和操作Swing GUI对象 。从t
执行此操作不正确。如引用的示例here所示,在开始worker之前,在EDT 上调整您的GIU元素,并在process()
或done()
中更新GUI