[RESOLVIDO] JTextArea atualizando dinamicamente!

3 respostas
N

Olá, galerinha do GUJ!
Tudo bem?

Bom, estou desenvolvendo uma aplicação que, resumindo, lê um arquivo texto, manipula-o e processa-o de forma a gerar um outro arquivo do modo que eu quero.

Cada arquivo texto tem, em média, 2000 linhas. Quando manipulados na leitura, eu recupero 900 linhas que vou processar.
Eu queria fazer um evento de log; no caso, meu software, após ler as linhas, vai passar a processá-las.
A cada processamento, gostaria que em minha JTextArea aparecesse:

“Processando linha 1…”
(Resolve o processamento da linha 1).
“Processando linha 2…”
(Resolve o processamento da linha 2).
“Processando linha 3…”
(Resolve o processamento da linha 3).

E assim por diante…
Só que meu JTextArea, ao iniciar o processamento, não aparece esse “log”.
Estou fazendo algo similar a isto:

public class InterfaceManipulacaoArquivo extends JDialog {

    private JTextArea logEventos;
     
    /* Construtor, outros métodos e afins...*/


    public void manipularArquivoTexto() {
       
        JFileChooser chooser = new JFileChooser(); 
        int opcao = chooser.showOpenDialog(null);
            
        if (opcao == JFileChooser.APPROVE_OPTION) {
            
            File arquivo = chooser.getSelectedFile();
            List<Linha> lstArquivo = ServicosTexto.recuperarLinhasArquivo(arquivo.getAbsolutePath());
            List<Linha> lstManipulados = new ArrayList<Linha>();

            for (Linha objLinha : lstArquivo) {

                // aqui, quero preencher o JTextArea com "Procesando linha (número-da-linha)..."
                String strLinha = ServicosTexto.manipularTextoLinha(objLinha.getTexto());
                Linha objAuxiliar = new Linha(strLinha);
                lstManipulados.add(objAuxiliar);
            }

            // quando o processamento terminar, quero preencher com "Dados processados com sucesso."
        } 
    } 
}

Já tentei o append() e o setText(), mas nenhum funcionou.
Alguma ideia?

Valeu, galera, abraço!

3 Respostas

T

Eu já fiz isso utilizando o setText() mesmo.
Como está a execução do programa? A JDialog é exibida, o textarea é adicionado à ela e exibido e depois o manipularArquivoTexto() é processado?
Você pode mostrar o resto do código?

V
  1. Ao criar tópicos, não crie com tags inúteis como [Dúvida] ou [Ajuda] em seu título;
  2. Seu problema é que você está fazendo todo processamento na thread do Swing. Portanto, o TextArea não será atualizado até que a thread do swing fique livre, ou seja, até que seu processamento termine. Se quiser ver a atualização, mova o processamento para uma thread separada:

new Thread(new Runnable() { public void run() { manipulaArquivoTexto(); } }).start();

E use o método append do JTextArea, pois ele é um dos poucos métodos do Swing que é thread-safe.

Para mais informações, leia:
http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

N

Funcionou, valeu Vini!

Criado 19 de julho de 2011
Ultima resposta 20 de jul. de 2011
Respostas 3
Participantes 3