While sempre atualizar o Jlabel

Ola pessoal

seguinte crei um programa de importacao para um banco de dados atraves de um arquivo de texto, ta funcionando file so que ta com um probleminha chato, criei um Jlabel e nele coloco um .settext(totalimport) com um contador que vai aumentando cada vez q insere um novo registro no banco, so que pensei que ele iria ficar mostrando a quantidade de registro ele ja importou como um contador porem ele so exibe o resultado quando termina o processo e nao a cada registro inserido, fiz com um System.out.println(totalimport+"") e ele mostra do jeito que eu queria porem quero com um Jlabel, ai vai meu codigo.

[code]public void lerDados(){

                try {
	    	BufferedReader leitor = new BufferedReader(new FileReader("C://conteudo.txt"));

	    	String linha;
			while((linha = leitor.readLine())!= null) // enquanto existir algo para ler
	    	{
		try{
                     conecUsuarios.statement.execute("INSERT INTO usuarios (nome, endereco, bairro, cidade, uf) VALUES ('"+linha.substring(nomei,nomef).trim()+"' ,  '"+linha.substring(enderecoi,enderecof).trim()+"' ,  '"+linha.substring(bairroi,bairrof).trim()+"' , '"+linha.substring(cidadei,cidadef).trim()+"' , '"+linha.substring(ufi,uff).trim()+"')");           
	    	//JOptionPane.showMessageDialog(null, linha.substring(nomei,nomef).trim()+"\n"+linha.substring(enderecoi,enderecof).trim()+"\n"+linha.substring(bairroi,bairrof).trim()+"\n"+linha.substring(cidadei,cidadef).trim()+"\n"+linha.substring(ufi,uff).trim());
                     
                                             
                     JL_TOTALIMPORTADOS.setText(totalimport+"");//AQUI ELE VAI MOSTRAR NO JLABEL O QUANTO JA IMPORTOU 
                     
                     totalimport = totalimport +1 ;//AQUI AUMENTA O CONTADOR
                       
                                          
                     
                     
                    }catch(SQLException erro){
                        
                        JOptionPane.showMessageDialog(null, erro);
                        
                    }
                       
                            
                            
                            }
	    	} catch (IOException e) {
	    		 JOptionPane.showMessageDialog(null, e);
	    		
	    	}

}[/code]

alguem sabe porque?

Sim, você precisa atualizar o seu contador numa thread separada.

Aliás, seria bom que vc rodasse todo esse processo numa thread separada.
Dê uma olhada na classe SwingWorker se for Java 6.

Aproveitando, dá uma olhada também na classe PreparedStatement. Concatenar SQL com o sinal de + não só deixa o código muito poluído como também é inseguro. Permite que o seu usuário faça o ataque de SQL Injection.

Boa noite…

Fiz uma pequena modificao no seu codigo, e adicionei um metodo para atualizar seu JLabel usando Thread, mas estou sem tempo para testar agora…

Qualquer posta ai depois…

valew

	public void lerDados(){   
	       
        try {   
             BufferedReader leitor = new BufferedReader(new FileReader("C://conteudo.txt"));   

             String linha;   
            while((linha = leitor.readLine())!= null) // enquanto existir algo para ler   
           {   
                 try{   
                 conecUsuarios.statement.execute("INSERT INTO usuarios (nome, endereco, bairro, cidade, uf) VALUES ('"+linha.substring(nomei,nomef).trim()+"' ,  '"+linha.substring(enderecoi,enderecof).trim()+"' ,  '"+linha.substring(bairroi,bairrof).trim()+"' , '"+linha.substring(cidadei,cidadef).trim()+"' , '"+linha.substring(ufi,uff).trim()+"')");             
                 //JOptionPane.showMessageDialog(null, linha.substring(nomei,nomef).trim()+"\n"+linha.substring(enderecoi,enderecof).trim()+"\n"+linha.substring(bairroi,bairrof).trim()+"\n"+linha.substring(cidadei,cidadef).trim()+"\n"+linha.substring(ufi,uff).trim());   

                 //  JL_TOTALIMPORTADOS.setText(totalimport+"");//AQUI ELE VAI MOSTRAR NO JLABEL O QUANTO JA IMPORTOU   
            
			     // usando o metodo para atualizar JLabel
                 apresentaStatus(JL_TOTALIMPORTADOS, totalimport);
             
                 totalimport = totalimport +1 ;//AQUI AUMENTA O CONTADOR   
                 
               
            }catch(SQLException erro){   
                JOptionPane.showMessageDialog(null, erro);   
            }   
                 
           }   
       } catch (IOException e) {   
         JOptionPane.showMessageDialog(null, e);   
       }   
   

} 
	// metodo usando uma thread para atulizar o JLabel
	public void apresentaStatus(final JLabel label1, final Integer status){
	    try{
		     EventQueue.invokeLater(new Runnable() {   
		     public void run() {   
		        label1.setText(status.toString());
		     }  
		    });
	        Thread.sleep(10);
	   } catch (InterruptedException e) {
		e.printStackTrace();
	  }
	}

Murilo, você só empilhou um evento na thread do Swing. Mas não criou nenhuma thread nova.

Como o código dele já roda na thread do Swing, sua modificação não surtirá efeito algum.

Agora, vc pode reescrever a função assim:

// metodo usando uma thread para atualizar o JLabel public void apresentaStatus(final JLabel label1, final Integer status){ try{ new Thread(new Runnable() { public void run() { EventQueue.invokeLater(new Runnable() { public void run() { label1.setText(status.toString()); } }); }).start(); Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } }

Isso deve funcionar, mas a barra pode ficar um pouco louca, já que não garantimos a ordem de execução das threads.
O ideal mesmo, é criar uma thread só, e mover todo aquele código para dentro dela.

Valeu Vini e murilo vou testar quando chegar em casa e posto os resultados

Pessoal

Tentei muito e não consegui criar uma Thread mas porque não entendo muito de Thread vou ate pegar um livro e vou estudar afinal isso é muito importante , usei um componente chamado TimeBeans que trabalha como uma Thread so que tambem permite que seja executado a mesma Thread varias vezes por um determinado espaço de tempo ou somente uma vez, no caso usei o TimeBeans no meu botao ai resolveu mas não considero a forma correta.
Sera que alguem poderia criar uma Thread como nesses exemplo dentro de uma mesma classe nesse exemplo ficaria agradecido

int i = 0;

public void mostrarContador(){
 i = 0;

while(i <= 1000){
i = i + 1;
MEUJLABEL.settext(i);
   }
}

public void metodoThread(){
mostrarContador;//vaiexecutar esse metodo na Thread
}


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {  //SE COLOCAR O METODO mostrarContador ELE SO VAI MOSTRAR QUANDO TERMINAR O CONTADOR
                                      
metodoThread();

}