Janela de "Aguarde...."

7 respostas
M

olá pessoal! estou com o seguinte problema:
-as buscas em um banco de dados de clientes as vezes são demoradas, podem retornar + de 20.000 clientes duma vez… então resolvi criar uma janela de “Aguarde…” algo semelhante a um Splash que eu chamo antes de fazer uma busca no banco só que a janela só renderiza completamente depois que a busca termina…, ou seja, aparece só o contorno dela e quando o programa pára de processar o query é q ela aparece por completo.

já fiz um teste até na propria janela onde eu mando mudar o texto de um label e depois rodar um loop… acontece que o loop roda e só depois o texto muda…

como posso resolver este problema??
Valeu!

7 Respostas

G

Bem vindo ao Portal Java!!!

Coloque seu código aqui para que possamos analizar o problema.

M

valeu!
seguinte: esse é o código… (até mudei o a parte que carrega o splash pra uma coisa + simples: mudar o texto de um JLabel)

//troca o texto
jlResultado.setText("Procurando");
//funcão que faz o query e monta o vetor pra ser carregado na tabela
vDados = setVectorData(stm, nome, email, id_vendedor, id_evento, status_cliente, dataDe, dataAte);
//carrega os vetores na tabela
tableModel = new MyTableModel(vDados, vColunas);
jTable.setModel(tableModel);

oq acontece é q não interessa o quanto demore a consulta o texto do JLabel só muda depois q o tablemodel está setado na tabela

tentei de tudo, revalidate, repaint, criar outras funções em separado, mandar trocar o texto antes de pegar os valores dos JTextFieldspra jogar no query… nada adiantou…

a parte do do banco de dados é meramente ilustrativa, substituí por um loop e o texto tb só aparece ao fim do loop.

pra resolver isso eu usei THREADS, mas achei um lance muito acoxambrado…

agradeceria + idéias (acho q deve ser algo na cara, mas eu não to enxergando)

obrigado!

M

ninguém??

M

não custa nada tentar + uma vez…

alguém?

K

você utilizou uma Thread? pois sem isso não será possível

S

Eu creio que a janela até tente aparecer, mas o processamento no banco é iniciado antes que ela possa aparecer por completo. Como esse processamento “trava” a interface, a renderização da janela só continua quando ele termina.

Tem que usar threads mesmo. Não é acoxambrado :mrgreen:

T
Acho que é qualquer coisa como:
//troca o texto
jlResultado.setText("Procurando"); 

Thread t = new Thread(){

public void run(){
//funcão que faz o query e monta o vetor pra ser carregado na tabela
vDados = setVectorData(stm, nome, email, id_vendedor, id_evento, status_cliente, dataDe, dataAte);
//carrega os vetores na tabela
tableModel = new MyTableModel(vDados, vColunas);
jTable.setModel(tableModel); 
}
};
t.start();

Acho que assim vai te dar certo.

Criado 18 de novembro de 2006
Ultima resposta 30 de dez. de 2006
Respostas 7
Participantes 5