[RESOLVIDO] SwingWorker para executar consulta pesada em background

Galera olha só… possuo um formulário que contém alguns gráficos em jfreechart ao carregar o formulário chamo dois métodos AtualizaDados() e slide(), dentro destes métodos possui ActionListener que roda uma instrução a cada x segundos, está funcionando tudo direitinho porém a tela fica toda travada, não dá nem pra fechar (só usando CTRL+ALT_DEL), queria fazer esses métodos rodarem em background possibilitando o usuário de usar o PC normalmente com ela aberta, poderiam a me ajudar a implementar esses métodos em SwingWorker, abaixo os dois métodos da forma atual:

Método slide() responsável por trocar de aba de um JTabbedPane a cada x segundos:

//Variáveis globais
private Timer timerSlide;
private int velocidadeSlide = 40000;//Troca de aba a cada 40 segundos

//Método para a apresentação de slide entre as abas
    private void slide() {
        ActionListener action = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (abas.getSelectedIndex() == (abas.getTabCount() - 1)) {
                    abas.setSelectedIndex(0);
                } else {
                    abas.setSelectedIndex(abas.getSelectedIndex() + 1);
                }
            }
        };
        this.timerSlide = new Timer(velocidadeSlide, action);
        this.timerSlide.start();
    }

Método AtualizaDados() responsável por chamar outros métodos que fazem a consulta no BD e preenche o jfreechart a cada x segundos:

//Variáveis globais
private Timer timerDados;
private int velocidadeDados = 2000;//Atualiza os rs a cada 2 segundos
private double angulo = 0;

//Metodo para atualizar a hora dos jLabels e realizar as consultas no BD para preencher o jfreechart    
    private void AtualizaDados() {
        ActionListener action = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (txtSlide.isSelected()) {
                    try {
                        String data = dt.format(new Date());
                        txtData.setText(data);
                        angulo = angulo + 5;
                        graficosTotalPC();
                        graficosEtiq();
                        Embaladores(txtData.getText());
                        graficosPE();
                        graficosCIL();
                        graficosOUT();
                        carregaStatusMesa(btnMesa1, "MESA 001");
                        carregaStatusMesa(btnMesa2, "MESA 002");
                        carregaStatusMesa(btnMesa3, "MESA 003");
                        carregaStatusMesa(btnMesa4, "MESA 004");
                        carregaStatusMesa(btnMesa5, "MESA 005");
                        carregaStatusMesa(btnMesa6, "MESA 006");
                        carregaStatusMesa(btnMesa7, "MESA 007");
                        carregaStatusMesa(btnMesa8, "MESA 008");
                        carregaStatusMesa(btnMesa9, "MESA 009");
                        carregaStatusMesa(btnMesa10, "MESA 010");
                        carregaStatusMesa(btnMesa11, "MESA 011");
                        carregaStatusMesa(btnMesa12, "MESA 012");
                        carregaStatusMesa(btnMesa13, "MESA 013");
                        carregaStatusMesa(btnMesa14, "MESA 014");
                        carregaPrioridades();
                        carregaMinutoQualidade();
                    } catch (SQLException ex) {
                        Logger.getLogger(formDashboard.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    try {
                        angulo = angulo + 5;
                        graficosTotalPC();
                        graficosEtiq();
                        Embaladores(txtData.getText());
                        graficosPE();
                        graficosCIL();
                        graficosOUT();
                        carregaStatusMesa(btnMesa1, "MESA 001");
                        carregaStatusMesa(btnMesa2, "MESA 002");
                        carregaStatusMesa(btnMesa3, "MESA 003");
                        carregaStatusMesa(btnMesa4, "MESA 004");
                        carregaStatusMesa(btnMesa5, "MESA 005");
                        carregaStatusMesa(btnMesa6, "MESA 006");
                        carregaStatusMesa(btnMesa7, "MESA 007");
                        carregaStatusMesa(btnMesa8, "MESA 008");
                        carregaStatusMesa(btnMesa9, "MESA 009");
                        carregaStatusMesa(btnMesa10, "MESA 010");
                        carregaStatusMesa(btnMesa11, "MESA 011");
                        carregaStatusMesa(btnMesa12, "MESA 012");
                        carregaStatusMesa(btnMesa13, "MESA 013");
                        carregaStatusMesa(btnMesa14, "MESA 014");
                        carregaPrioridades();
                        carregaMinutoQualidade();
                    } catch (SQLException ex) {
                        Logger.getLogger(formDashboard.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        };
        this.timerDados = new Timer(velocidadeDados, action);
        this.timerDados.start();
    }
1 curtida

Opa amigo, beleza?

Usa uma Thread, vai rolar tudo em “segundo plano”

public void seuMetodo(){
    new Thread() {
        @Override
        public void run() {
   //Aqui vc joga o que vc precisa rodar...
        }
    }.start();
}
private void seuMetodo() {
    SwingWorker worker = new SwingWorker() {
        @Override
        protected Object doInBackground() throws Exception {
            System.out.println("Aqui vc poe oq vc quer");
            return null;
        }
    };
    worker.execute();
}

@rodriguesabner, obrigado…deu certo!

1 curtida

Nunca é tarde para agradecer!!
Valew @rodriguesabner era exatamento o que eu precisava!!! :slight_smile:

1 curtida