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

Java 在等待线程完成时更新Swing GUI,java,multithreading,swing,thread-safety,swingworker,Java,Multithreading,Swing,Thread Safety,Swingworker,我有一个swing应用程序,其中运行一个线程类来执行特定的任务。 我需要在某个时刻停止运行线程。因此,我在线程中放置了一个布尔值,当我将它设置为true时,线程将停止 问题是线程需要一些时间来完成它正在做的内部工作 我需要阻止用户在GUI上执行任何操作,直到线程完成。 我尝试了类似setEnabled(false)的方法,但应用程序处于冻结状态,并且在线程停止之前GUI不会更改。 我还尝试在另一个线程中更新GUI,但这也不起作用 当发现停止线程的延迟时,是否有任何方法更新GUI或使应用程序像被禁

我有一个swing应用程序,其中运行一个线程类来执行特定的任务。 我需要在某个时刻停止运行线程。因此,我在线程中放置了一个布尔值,当我将它设置为true时,线程将停止

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

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

当发现停止线程的延迟时,是否有任何方法更新GUI或使应用程序像被禁用一样

感谢您更好地使用:

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

最好使用:


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

如果您知道线程何时停止,请为另一个布尔值设置,例如thread\u stopped=true;
在任何操作事件之前,请检查线程\u stopped是否为true,然后继续。

如果您知道线程何时停止,请设置另一个布尔值,例如thread\u stopped=true;
在任何操作事件之前,请检查线程是否已停止,然后继续。

“我尝试了类似setEnabled(false)的操作,但应用程序处于冻结状态,GUI在线程停止之前不会更改”-您如何知道线程已停止?例如:我设置了setEnabled(false)禁用的按钮;然后我停止了线程,我使用了:while(this.myThread.isAlive()){}然后我设置了按钮enabled“我尝试了类似setEnabled(false)的东西,但是应用程序是冻结的,GUI在线程停止之前不会更改”-你怎么知道线程停止了?例如:我设置了一个按钮被setEnabled(false)禁用;然后我停止了线程并使用:while(this.myThread.isAlive()){}然后我设置了按钮enabled@Joe123:您可以通过单击左侧的来接受此答案。@Joe123:您可以通过单击左侧的来接受此答案。
button.setEnabled(false);
...    
@Override
protected String doInBackground() throws Exception {
    // process related code
    return "";
}

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