在等待线程完成时更新Swing GUI

时间:2011-12-14 08:31:45

标签: java multithreading swing thread-safety swingworker

我有一个swing类,运行Thread类来执行特定的Job。 我需要在某个时刻停止正在运行的线程。所以我在线程中放了一个布尔值,当我将它设置为true时,线程将被停止。

问题是该线程需要一些时间来完成它正在进行的内部工作。

我需要阻止用户在GUI上执行任何操作,直到线程完成。 我尝试了类似setEnabled(false)的东西但是应用程序冻结了,并且在线程停止之前不会更改GUI。 我也尝试在另一个线程中更新GUI,但这也不起作用。

是否有任何方法可以更新GUI或使应用程序像禁用一样,同时停止线程的延迟得到完善。

由于

2 个答案:

答案 0 :(得分:5)

最好使用SwingWorker

button.setEnabled(false);
...    
@Override
protected String doInBackground() throws Exception {
    // process related code
    return "";
}

@Override
protected void done() {
    button.setEnabled(true);
}

在完成done()()方法的过程后,将调用doInBackground方法。

答案 1 :(得分:0)

如果你知道你的线程何时停止设置另一个布尔值,例如thread_stopped = true; 在任何动作事件之前检查thread_stopped是否为真,然后继续。