[RESOLVIDO] JTextArea em Tempo Real

3 respostas Resolvido
java
fabioklopes

Não estou conseguindo fazer o TRUNCATE ser lançado no JTextArea em tempo real.
O que eu estou fazendo de errado? Já tentei “inclusive” com uma Thread() mas mesmo assim não funcionou. Poderiam me ajudar?

private void executaTruncate() throws SQLException, ClassNotFoundException, InterruptedException {
    
    //CONEXÃO COM BD FUNCIONANDO NORMALMENTE
    con = cbd.conectarBD();

    sql = "SELECT table_name AS tabela FROM information_schema.tables WHERE table_name <> 'usuarios' AND table_schema = 'permissoes'";
    ps = con.prepareStatement(sql);
    rs = ps.executeQuery();

    String truncate = null;
    while (rs.next() == true) {
        //ELE EXECUTA O TRUNCATE NORMALMENTE
        truncate = "TRUNCATE " + rs.getString("tabela");
        ps = con.prepareStatement(truncate);
        ps.executeUpdate(truncate);

        //INICIO DOS MEUS PROBLEMAS
        Timer t = new Timer(20, (ActionEvent e) -> {
            try {
                v_Console.append("Apagando a tabela ==> [" + rs.getString("tabela") + "]");
            } catch (SQLException ex) {
                msg.falha("Falha na contagem do Timer.\nMotivo: " + ex);
            }

        });
        t.start();
    }

    con.close();
}

Agradeço a ajuda e a atenção!
Obs.: procurei em alguns tópicos mas não encontrei nada parecido.

3 Respostas

rodriguesabner

O que acontece? Ele trava a janela?

fabioklopes

@rodriguesabner, isso mesmo! A tela fica congelada até o processo todo ser executado. Depois da execução, o sistema faz o output no JTextArea… Dessa forma, o usuário fica perdidão pois ele não está vendo o que o sistema está fazendo. Mas pra resumir, o TRUNCATE é executado com êxito… Apenas o output não está em tempo real…

fabioklopes
Solucao aceita

Pessoal, consegui resolver com um código que encontrei na web.

SwingWorker w = new SwingWorker() {
    @Override
    protected Object doInBackground() throws Exception {
        
        /*
        *
        * todo o meu código aqui
        * inclusive com o JTextArea.append("meu texto para output");
        *
        */
                
        return 0; // necessário retornar alguma coisa.
        } // fechando protected.
    }; // fechando o SwingWorker.
    w.execute(); // compilando o código dentro do SW.
}

Desta forma consegui fazer o OUTPUT dentro do JTextArea em tempo real da forma que eu precisava.
Obrigado!

Criado 13 de junho de 2019
Ultima resposta 15 de jun. de 2019
Respostas 3
Participantes 2