J'ai un code simple avec une boucle for
. Dans chaque passage de la boucle, je dois incrémenter le JProgressBar; Cependant, cela ne fonctionne pas. Voir ci-dessous:thread en Java Swing ne fonctionne pas
public void atualizarBarraDeProgresso(final int valorGeral, final int valorAtual) {
Thread threadProgressoCarregamento = new Thread() {
@Override
public void run() {
jProgressBarPersistindo.setValue(valorAtual);
}
};
threadProgressoCarregamento.start();
}
J'appelle la méthode "atualizarBarraDeProgresso" dans une boucle comme ci-dessous:
progressBar.setMinimum(0);
progressBar.setMaximum(qtd);
for(int i = 0; i < qtd; i++) {
atualizarBarraDeProgresso(qtd, i + 1);
doSomething();
}
Mais rien ne se passe avec mon progressBar.
-vous * vraiment * voulez que plusieurs threads? Dans tous les cas, je suppose que le problème est que la * boucle elle-même * se produit sur l'ADT (c'est-à-dire dans un "gestionnaire de clic") et * bloque * l'interaction de l'interface utilisateur Swing et les met à jour jusqu'à la fin. Pensez à utiliser un [SwingWorker] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) - l'utiliser correctement éliminera probablement tous les problèmes. Assurez-vous également de mettre à jour * seulement * les objets Swing sur l'ADT. – user2246674
Appelez repaint() sur le JPanel contenant après avoir défini la valeur à tout moment? C'est peut-être tout ce qui manque. – Barryrowe
appelez la méthode repaint(), et en passant, la solution est très mauvaise. –