No código abaixo, a mensagem “Validando o arquivo. Por favor, aguarde.” somente é exibida no JTextArea após a execução do método validar() do objeto arquivo, apesar de o comando para exibição encontrar-se antes.
O que pode estar ocorrendo?
É alguma configuração a ser feita?
privatevoidvalidarArquivo(){textArea.append("\nValidando o arquivo. Por favor, aguarde.\n\n");arquivo.validar();textArea.append("\nArquivo validado.\n");}
Não entendi, pra que serve esse metodo validarArquivo(), para mostrar as mensagens…
Você tem esse outro arquivo.validar(), é para validar? Por que não coloca as mensagens nele mesmo…
R
roger_rf
Na verdade você está “travando” a EDT (Event Dispatch Thread, ou thread de tratamento de eventos) do Swing. Você solicitou o primeiro append(), e o comando ficou enfileirado para atendimento posterior pelo Swing. Em seguida você solicitou o método validar(), que demorou a ser concluído, e enquanto isso o primeiro append() ficou pendente. Depois do validar(), chegou o segundo append(), que também ficou enfileirado. Depois que o método validarAquivo() se encerrou, os dois append()'s que ficaram enfileirados finalmente executaram, causando o efeito que você descreveu. Experimente o seguinte:
textArea.append("\nValidando o arquivo. Por favor, aguarde.\n\n");// Enfileira o conteúdo do bloco run() para execução posterior.// Dessa maneira, o método validarArquivo() vai se encerrar, permitindo a// exibição da mensagem "aguarde", e logo depois da exibição da// mensagem o bloco run() enfileirado será executado.SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){arquivo.validar();textArea.append("\nArquivo validado.\n");}});