我想使用JProgressBar
,必须在一秒钟内加载。我不想等待任何任务完成。只想在一秒钟内填写进度条。所以我写下面的代码。但它不起作用。进度条没有填补。我是Java新手。请任何人都可以帮助我。
public void viewBar() {
progressbar.setStringPainted(true);
progressbar.setValue(0);
for(int i = 0; i <= 100; i++) {
progressbar.setValue(i);
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
progressbar.setValue(progressbar.getMinimum());
}
答案 0 :(得分:6)
你不能在主Swing线程,EDT或“事件调度线程”上调用Thread.sleep(...),因为除了把你的整个应用程序,进度条和所有内容都放在休眠状态之外什么都不做。可能你没有看到任何事情发生1秒,然后宾果游戏,整个进度条都被填满了。
我建议您使用Swing Timer代替Thread.sleep,否则如果您想最终监视长时间运行的进程,请使用后台线程,例如SwingWorker。 SwrogWorkers在JProgressBar教程中讨论。
例如,使用计时器:public void viewBar() {
progressbar.setStringPainted(true);
progressbar.setValue(0);
int timerDelay = 10;
new javax.swing.Timer(timerDelay , new ActionListener() {
private int index = 0;
private int maxIndex = 100;
public void actionPerformed(ActionEvent e) {
if (index < maxIndex) {
progressbar.setValue(index);
index++;
} else {
progressbar.setValue(maxIndex);
((javax.swing.Timer)e.getSource()).stop(); // stop the timer
}
}
}).start();
progressbar.setValue(progressbar.getMinimum());
}