Boa tarde pessoal. Eu sempre acesso o fórum para tirar minhas dúvidas, mas é a primeira vez que crio um tópico.
Meu problema é o seuinte: tenho um JDialog com uma barra de progresso, e desse JDialog eu chamo minha classe para gerar o relatório no iReport.
Na minha classe do JDialog, criei duas threads, uma para cuidar da JProgressBar e outra que chama minha classe que gera o relatório.
Até aí, tudo funciona normal, o que eu não consegui resolver é que quando fecho meu JDialog, a janela que mostra meu relatório perde o foco e depois não consigo fazer o relatório ganhar o foco novamente, tendo que selecionar a janela dele pela barra de tarefas.
Meu JDialog:
[code]public class LoadingRelatorio extends javax.swing.JDialog {
/**
* Creates new form LoadingRelatorio
*/
public LoadingRelatorio(String titulo, String sql, String relatorio) {
initComponents();
preparaFormulario(titulo, sql, relatorio);
}
private void preparaFormulario(final String titulo, final String sql, final String relatorio){
setTitle("SESMS - Sistema de Envio de SMS");
setModal(true);
setLocationRelativeTo(this);
Thread threadRelatorio = new Thread(new Runnable() {
@Override
public void run() {
GeraRelatorio geraRelatorio = new GeraRelatorio();
geraRelatorio.geraRelatorio(titulo, sql, relatorio);
LoadingRelatorio.this.dispose();
}
});
Thread threadBarra = new Thread(new Runnable() {
@Override
public void run() {
barraProgresso.setIndeterminate(true);
}
});
try {
threadBarra.start();
threadRelatorio.join();
threadRelatorio.start();
} catch (InterruptedException ex) {
System.out.println(ex.getLocalizedMessage());
}
}
}[/code]
Minha classe de relatório:
[code]public class GeraRelatorio {
public void geraRelatorio(String titulo, String sql, String relatorio){
try {
Conexao conexao = new Conexao();
Map parameters = new HashMap( );
parameters.put("TITULO_RELATORIO", titulo);
parameters.put("SQL_RELATORIO", sql);
JasperReport report = JasperCompileManager.compileReport("./reports/"+relatorio);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, conexao.getConexao());
JasperViewer viewer = new JasperViewer(jasperPrint, false);
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
viewer.setVisible(true);
} catch (JRException ex) {
JOptionPane.showMessageDialog(null, "Erro ao gerar o relatório.\n"+ex.getLocalizedMessage(),
"SESMS - Sistema de Envio de SMS", JOptionPane.ERROR_MESSAGE);
}
}
}[/code]
Alguém tem alguma idéia de como fazer minha janela de relatório não perder o foco quando eu fechar o JDialog?