galera tenho uma aplicação desktop que envia um arquivo a um servidor remoto qdo o usuário clica no botão Concluir Documento
dependendo da conexão de internet do usuário, este processo (envio do arquivo e resposta do servidor confirmando o recebimento) leva em torno de 6 segundos
durante esse processo, gostaria de exibir uma JDialog modal com um JProgressBar, para que o usuário veja q o processo está em andamento e a a plicação não parou.
Quando a aplicação desktop receber a confirmação do servidor, a JDialog deve sumir.
já consegui implementar esse esquema, mas o problema é que a JDialog não “pinta” o seu conteudo, fica tudo branco. Acho q tem algo haver com o método paint()… etc, mas não sei o que fazer pra que a JDialog desenhe os componentes.
obs: a JDialog é chamada a partir de outra thread para que a aplicação não pare, esperando o usuario fechar a dialog.
código relevante do controle que chama a Thread com a Dialog e envia o documento ao servidor
public void concluirDocumento(){
...
Thread threadBarraProgresso = new ThreadBarraProgressoIndeterminada();
try {
//barra de progresso para que o usuário veja que o processo está em andamento
threadBarraProgresso.start();
//envia o documento ao servidor remoto
documentoService.enviarDocumento(usuarioService.getUsuario(), byte[] documento);
//se chegar aqui, o server confirmou o recebimento, e a Thread é interrompida
threadBarraProgresso.interrupt();
JOptionPane.showMessageDialog(null, "Arquivo enviado com sucesso.");
} //fim try
catch(Exception e){
//ocorreu algum erro, mas fecha a dialog da mesma forma
threadBarraProgresso.interrupt();
e.printStackTrace()
}
}//fim metodo
e minha classe que extende Thread
public class ThreadBarraProgressoIndeterminada extends Thread{
//inner class que extende JDialog
DialogProgressBar dialogIndeterminateProgress;
@Override
public synchronized void run() {
//inicia a Thread: instancia a JDialog e mostra
dialogIndeterminateProgress = new DialogProgressBar(null, true);
dialogIndeterminateProgress.setVisible(true);
}
@Override
public void interrupt() {
//finaliza a Thread e esconde a JDialog
dialogIndeterminateProgress.setVisible(false);
super.interrupt();
}
//classe interna que extende JDialog
private class DialogProgressBar extends JDialog{
private JProgressBar progressBar;
//construtor configura a JDialog e insere os compoenentes
public DialogProgressBar(Frame parent, boolean modal) {
super(parent, modal);
this.progressBar = new JProgressBar();
this.progressBar.setBounds(-10, 0, 370, 20);
//barra de progresso é indeterminada
this.progressBar.setIndeterminate(true);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
//adiciona JProgressBar no painel
this.getContentPane().add(progressBar);
this.setResizable(false);
this.setSize(370, 32);
this.setTitle("Enviando Documento, aguarde ...");
}
}
}
como disse, já funciona legal, só que a JDialog não desenha a JProgressBar no seu container (testei outros componentes como JLabel, mas tb não desenha) fica tudo branco.
alguém tem alguém tem alguma dica ??
valeu