我试图让JProgressBar每100秒每秒增加1,而目前我正在使用Thread.sleep(100)while语句,如下所示:
try {
while (i<=100){
doTime();
}
} catch (InterruptedException ex) {
Logger.getLogger(SplashScreen.class.getName()).log(Level.SEVERE, null, ex);
}
public void doTime() throws InterruptedException{
jLabel1.setText("sleeping");
Thread.sleep(100);
jLabel1.setText("start");
i++;
pb.setValue(i);
pb.repaint();
}
Run Code Online (Sandbox Code Playgroud)
如果我通过System.out.println实时显示它进行调试但是摇摆GUI冻结,直到它退出while循环可以有人帮忙吗?
谢谢
亚光
正如派生所说,你应该使用SwingWorker.从它的javadoc:
"SwingWorker专为需要在后台线程中运行长时间运行任务并在完成或处理时提供UI更新的情况而设计.SwingWorker的子类必须实现doInBackground()方法来执行后台计算. "
通过java教程中对ProgressBarDemo.java的这一细微更改,您几乎可以得到您想要的内容.
public Void doInBackground() {
Random random = new Random();
int progress = 0;
//Initialize progress property.
setProgress(0);
while (progress < 100) {
//Sleep for up to one second.
try {
//original code: Thread.sleep(random.nextInt(1000));
Thread.sleep(10);
} catch (InterruptedException ignore) {}
//Make random progress.
//originalcode: progress += random.nextInt(10);
progress++;
setProgress(Math.min(progress, 100));
}
return null;
}
Run Code Online (Sandbox Code Playgroud)