Sincronizando JProgressBar com processo demorado

4 respostas
D

E ai galera tudo tranks com vcs??

Seguinte… to precisando de um help aqui.

Tenho uma interface em SWING que ao clicar em um determinado botão, executa
um processamento de custo e é um processo bastante demorado, ai tenho um JProgressBar
que vai simular o desenrrolar do processo, só que ele fica invisível pro usuário, ai quando clica
nesse botão eu quero que ele aparece, só que isso não esta ocorrendo, ele só fica visível quando
termina o processo. tipo faço o seguinte só pra vcs entenderem.

private void meuMetodo(){

meuProgress.setVisible(true);

inciaProcesso();

}

estou atribuindo a visibilidade do JProgressBar antes mesmo de chamar o processo, porém só fica visivel quando termina o processo…

alguem saberia me dar uma solução para tal??

valew galera.

4 Respostas

Viniciustelles

Boa tarde, também estou com o mesmo problema qualquer coisa se conseguir aviso ou se alguém conseguir me avise abraços.
att

samuk1

Boa Tarde... Primeiro, coloque o Codigo Completo, onde vc cria a Progress para facilitar ...
Segundo eu possou isso em minha aplicação onde eu criei uma Classe:
Com 2 Metodos, Inicia e Finaliza. Assim:

public class ProgressBar {


    JDialog frame = new JDialog();
    JProgressBar aJProgressBar = new JProgressBar();
    JLabel label = new JLabel();
    JPanel panel = new JPanel();
    Font fonte = new Font("Arial", Font.BOLD, 12);
   
	public void iniciaBarra(String titulo){
		  
		panel.setLayout(null);
		frame.add(panel);
		
		label.setText(titulo);
	    label.setBounds(5 ,10, 300, 30);
	    label.setFont(fonte);
	    panel.add(label);
	    
	    aJProgressBar.setIndeterminate(true);
	    aJProgressBar.setBounds(17, 40 , 250, 30);
	    panel.add(aJProgressBar);
	    
	    frame.setSize(300,120);
	    frame.setLocationRelativeTo(null);
	    frame.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
		frame.setVisible(true);
		  }
	public void fechaBarra(){
	    frame.dispose();
	}
		}

E Quando preciso dela apenas crio o objeto e Mando ela iniciar... no seu caso seria:

private void meuMetodo(){ 
ProgressBar barra = new ProgressBar();
barra.iniciaBarra("Carregando os arquivos"); // aqui ele inicia a barra 
inciaProcesso(); 
barra.fechaBarra(); // aqui ele fecha ela...
}

Seria isso? :-o

F

Provavelmente você está fazendo esse processamento pesado na mesma thread da EDT certo?
Neste caso, sua interface gráfica ficara travada. É necessário o uso de outra thread para o processamento.

Se não for isso, posta seu código que fica mais fácil. =D

mateusviccari

idem ao felipeaps, se voce esta fazendo tudo na mesma thread nao vai ver a barra aumentando de valor.
pesquise sobre SwingWorker, ele é uma thread que voce implementa só que ele foi otimizado pra se trabalhar com componentes swing.

Criado 31 de março de 2008
Ultima resposta 29 de ago. de 2012
Respostas 4
Participantes 5