У меня есть простой код с петлей for
. В каждом проходе цикла я должен увеличивать JProgressBar; однако это не работает. Смотрите ниже:нить в Java Swing не работает
public void atualizarBarraDeProgresso(final int valorGeral, final int valorAtual) {
Thread threadProgressoCarregamento = new Thread() {
@Override
public void run() {
jProgressBarPersistindo.setValue(valorAtual);
}
};
threadProgressoCarregamento.start();
}
Я вызываю метод "atualizarBarraDeProgresso" в петле, как показано ниже:
progressBar.setMinimum(0);
progressBar.setMaximum(qtd);
for(int i = 0; i < qtd; i++) {
atualizarBarraDeProgresso(qtd, i + 1);
doSomething();
}
Но ничего не происходит с моим ProgressBar.
ли вы * действительно * хотите, что многие темы? В любом случае, я подозреваю, что проблема заключается в том, что сам цикл * * происходит в ADT (т. Е. В обработчике кликов) и * блокирует взаимодействие Swing UI и обновления до тех пор, пока оно не завершится. Подумайте о том, как использовать [SwingWorker] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) - использование такого правильного варианта, скорее всего, устранит все проблемы. Кроме того, убедитесь, что * только * обновляет объекты Swing на ADT. – user2246674
Вы вызываете repaint() на содержащий JPanel после того, как вы установили значение в любой точке? Это может быть все, что отсутствует. – Barryrowe
вызовите метод repaint(), и, кстати, решение очень плохое. –