[Resolvido] JDialog com JProgressBar + Relatório iReport

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?

Consegui resolver meu problema nesse fim de semana. Se alguém tiver a mesma dúvida, foi assim que consegui resolver:

JDialog:

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);
            }
        });
        Thread threadBarra = new Thread(new Runnable() {
            @Override
            public void run() {
                barraProgresso.setIndeterminate(true);
            }
        });
        try {
            threadBarra.start();
            threadRelatorio.join();
            threadRelatorio.start();
        } catch (InterruptedException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao gerar o relatório.\n"+ex.getLocalizedMessage(), 
                                    "SESMS - Sistema de Envio de SMS", JOptionPane.ERROR_MESSAGE);
        }
    }

A classe geradora de relatório:

public class GeraRelatorio {    
    
    public void geraRelatorio(String titulo, String sql, String relatorio, JDialog tela){
        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);
            tela.dispose();
            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);
        }
    }
    
}

Foi só passar o JDialog como parâmetro para a classe que gera o relatório, e fechar o JDialog dentro dessa classe.