Boa dia a todos!
Tenho um frame que é chamado antes de exibir um relatório .doc. Este frame exibe uma mensagem para o usuário aguardar e um botão desabilitado a princípio.
Então, este frame é exibido e em seguida ele gera o .pdf, que demora uns segundos para ficar pronto.
O problema é: dou um setVisible(true) no frame, ele aparece mas os componentes dentro dele(label, button) não aparecem. É tão rápido que o .pdf já começa a ser gerado, e o frame fica “congelado”. Só quando termina a geração do pdf que os campos do frame “descongelam” e aparecem com a mensagem “Relatório gerado com sucesso”.
Tem como eu exibir este frame todo e depois começar a gerar o .pdf?
O correto no caso é usar uma Thread separada para realizar a tarefa demorada. Isso evita que a Thread que controla a GUI trave, deixando a tela congelada como ocorreu. Procure por Threads, como implementar a interface Runnable e pode dar uma olhada também em SwingWorker.
No meu caso eu tenho um frame para mostrar ao usuário para aguardar, quando termino de executar a thread da qual falei, o label do frame muda para “Relatório gerado com sucesso!”.
Ficaria assim??
thA.start();
thA.join();
formAguardando.getLabel1().setText("Relatório gerado com sucesso!");
formAguardando.getOkButton().setEnabled(true);
Desse jeito não deu certo! O programa mudou o nome do label e habilitou o botão antes de terminar de gerar o relatório! :\