Thread.sleep()

2 respostas
eguerra

Estou com dificuldades para fazer uma JProgressBar esperar.

o código:

for (int i = 1; i <= 100; i++) {
			
			pb.setValue(pb.getValue()+1);
			try {
				Thread.sleep(20);
			} catch (Exception ef) {}
		}

Quando coloco pra rodar, ele espera um tempo e depois preenche a ProgressBar de uma vez só.

Alguém poderia me ajudar?

2 Respostas

Marky.Vasconcelos

Não deixe seu catch vazio coloque ef.printStackTrace() para ver se deu erros

E outra coisa

Se voce ta fazendo um for de 0 a 100 entao por que a cada iteração você pega o valor da JProgressBar e soma um? Seria mais fáçil colocar o valor de i,por que se alguém ver apenas essa parte do código pode pensar que você já tem um valor pré defenido e dificulta entender o código.

ViniGodoy

Você está atualizando a JProgressBar da mesma thread do Swing. A thread do swing é a mesma que dispara os eventos do botão e é a mesma que manda a JProgressBar se repintar. Se tudo ficar na mesma thread, a progressbar não vai ser repintada até o evento do botão terminar.

Tente disparar esse código numa outra thread, como no exemplo abaixo:

new Thread() { @Override public void run() { for (int i = 1; i <= 100; i++) { pb.setValue(pb.getValue()+1); try { Thread.sleep(20); } catch (Exception ef) {} } }

Criado 28 de dezembro de 2007
Ultima resposta 29 de dez. de 2007
Respostas 2
Participantes 3