Вы не можете вызвать Thread.sleep (...) в главном потоке Swing, EDT или «потоке диспетчеризации событий», поскольку это ничего не даст, кроме как перевести все ваше приложение, индикатор выполнения и все в спящий режим. Вероятно, вы видите, что ничего не происходит в течение 1 секунды, затем бинго, весь индикатор выполнения заполнен.
Я предлагаю, чтобы вместо Thread.sleep вы использовали для этой части таймер Swing, или, если вы хотите в конечном итоге отслеживать длительный процесс, используйте фоновый поток, такой как SwingWorker. SwingWorkers обсуждаются в руководстве по 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());
}