Ajuda para atualizar jtextarea em tempo de execução.. [RESOLVIDO]

3 respostas
A

Bom dia a todos,

pessoal é o seguinte
tenho uma tela de processamento de NF-e… nesta tela tem um botão que serve para assinar a nota…
o funcionamento deste está correto … assinando perfeitamente…
abaixo desse botão eu tenho um jtextarea que da o status para o usuário ex:
quando o usuário clica no botão é escrito o texto “assinando nota fiscal” e quando esse processo termina é escrito o texto “nota assinada com sucesso”…
Até aqui tudo bem … o sistema esta fazendo isso…

O problema é:
Quando eu clico no botão o sistema só escreve os textos após todo o processamento… eu queria fazer com que o sistema escrevesse dinamicamente … tipo … o usuário clica e dai já escreve … depois que processa … escreve o resultado (espero ter sido claro)…

o codigo que estou usando é o seguinte:

no actionPerformed do botão:

AssinaNFe assina = new AssinaNFe();
assina.run();

e a thread que faz o processamento:

private class AssinaNFe extends SwingWorker<Void, Void>{

        @Override
        protected Void doInBackground() throws Exception {
            
            taProcessamento.append("Assinando a Nota Fiscal Eletrônica (NF-e)..."+"\n");
            taProcessamento.setCaretPosition(taProcessamento.getText().length());
            taProcessamento.repaint();
            
            FuncaoAssinarNFe assinar = new FuncaoAssinarNFe();
            assinar.assinarA1(caminhoCertificado, senhaCertificado, notaNFe);
            
            return null;
            
        }
        
        @Override
        public void done(){
            taProcessamento.append("NF-e assinada com sucesso."+"\n");
            taProcessamento.setCaretPosition(taProcessamento.getText().length());
            taProcessamento.repaint();
        }
        
    }

não sei porque não atualiza o jtextarea em tempo de execução …
alguém pode me ajudar?

Grato
Alan

3 Respostas

Rodrigo_Vieira_Pinto

Tente usar, ao invés do método repaint(), o método validate().

Melhor ainda: tente atualizar a jtextarea primeiro na mesma thread do processamento. Depois tente numa thread separada.

A

Opa,

Rodrigo obrigado por responder …

fiz a alteração mas ainda não deu certo …

segue o código alterado:

evento do botão:

AssinaNFe assina = new AssinaNFe();
assina.run();

Thread para processamento:

private class AssinaNFe extends SwingWorker<Void, Void>{

        @Override
        protected Void doInBackground() throws Exception {
            
            Thread t = new Thread(){
                @Override
                public void run(){
                    taProcessamento.append("Assinando a Nota Fiscal Eletrônica (NF-e)..."+"\n");
                    taProcessamento.setCaretPosition(taProcessamento.getText().length());
                    taProcessamento.validate();
                }
            };
            t.start();
            
            
            FuncaoAssinarNFe assinar = new FuncaoAssinarNFe();
            assinar.assinarA1(caminhoCertificado, senhaCertificado, notaNFe);
            
            return null;
            
        }
        
        @Override
        public void done(){
            Thread t = new Thread(){
                @Override
                public void run(){
                    taProcessamento.append("NF-e assinada com sucesso."+"\n");
                    taProcessamento.setCaretPosition(taProcessamento.getText().length());
                    taProcessamento.validate();
                }
            };
            t.start();
        }
        
    }

Coloquei novas threads para atualização do jtextarea e alterei o repaint para validate … porém não funcionou … continua processando tudo primeiro antes de escrever …

Grato pela atenção
Alan

A

Opa … pessoal consegui resolver o problema…

o segundo código do processamento da thread está correto…

o que estava errado era no actionPerformed do botão

ao trocar esse código:

AssinaNFe assina = new AssinaNFe();
assina.run();

por esse código:

AssinaNFe assina = new AssinaNFe();
assina.execute();

funcionou corretamente do jeito que eu queria!!

Obrigado ao amigo Rodrigo e a todos que viram este post…

Alan

Criado 3 de julho de 2012
Ultima resposta 3 de jul. de 2012
Respostas 3
Participantes 2