【发布时间】:2014-02-07 07:13:20
【问题描述】:
我尝试实现一个自动滚动进度条。问题是一旦它开始我就无法阻止它。但它在逐步调试期间工作正常,并且仅在调试期间工作。
这是我的代码片段。任何帮助将不胜感激。
package test;
import javax.swing.*;
public final class MyTest{
private boolean isvisible = false;
private JProgressBar progressbar = new JProgressBar();
/**
* thread of automatic rolling progress-bar
*/
private Thread proT = new Thread(new Runnable(){
@Override
public void run(){
isvisible = true;
progressbar.setVisible(true);
while(true){
progressBar.setValue((progressBar.getValue() + 20)%100);
System.out.println(progressBar.getValue());
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
if(!isvisible){
progressbar.setVisible(false);
break;
}
}
}
});
/**
* constructor
*/
public MyTest(){
//initiate GUI
}
/**
* show an automatic rolling progress-bar
*/
public void showProgressBar(){
proT.start();
}
/**
* stop/veil the progress-bar
*/
public void veilProgressBar(){
isvisible = false;
}
}
【问题讨论】:
-
为了尽快获得更好的帮助,请发布MCTaRE(经过测试和可读的最小完整示例)。
-
注意:GUI 更新应该在 EDT 上执行,而我们不应该让 EDT 休眠。有关详细信息,请参阅Concurrency in Swing。
-
你是如何阻止它的?
-
@TimB 我试图通过更改变量 isvisible 来阻止它。
-
@AndrewThompson 谢谢你的提示。我刚刚发布了一个不完整的片段,因为实际上我的 MCTaRE 在运行期间没有这样的问题。
标签: java multithreading swing event-dispatch-thread thread-sleep