1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Alterar texto de uma JTextArea em tempo de execução.

Bom tarde a todos,

Tenho uma rotina de backup que deveria escrever o resultado em uma JTextArea, em tempo de execução:

private void executarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Path origem = Paths.get("\\\\apolo\\sobe");
        Path destino = Paths.get("\\\\hermes\\DCPD\\BKP-SOBE\\teste5");

        try {
            jtaRetorno.append("Executando Cópia");
            Files.walkFileTree(origem, new CopyDir(origem, destino, jtaRetorno));

        } catch (IOException ex) {
            Logger.getLogger(FrmExecutaCopia.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

A classe CopyDir tem o seguinte código:

public class CopyDir extends SimpleFileVisitor<Path> {
    private final Path origem;
    private final Path destino;
    private final JTextArea retorno;

    // Construtor com origem e destino
    public CopyDir(Path origem, Path destino, JTextArea retorno) {
        this.origem = origem;
        this.destino = destino;
        this.retorno = retorno;
    }

    // Usado para criar o diretorio
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
        throws IOException {
        copiaPath(dir);
        retorno.append("Diretorio "+dir.toString()+" criado.\n");
        System.out.println("Diretorio "+dir.toString()+" criado.\n");
        return FileVisitResult.CONTINUE;
    }
    // Copia cada arquivo existente na arvore
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
        throws IOException {
        copiaPath(file);
        retorno.append("Arquivo "+file.toString()+" copiado.\n");
        System.out.println("Arquivo "+file.toString()+" copiado.\n");
        return FileVisitResult.CONTINUE;
    }

    // Metodo que efetivamente copia os arquivos
    private void copiaPath(Path entrada) throws IOException {
        // encontra o caminho equivalente na arvore de copia
        Path novoDiretorio = destino.resolve(origem.relativize(entrada));
        Files.copy(entrada, novoDiretorio);
    }
    /*
    public static void main(String[] args) throws IOException{
        Path origem = Paths.get("\\\\apolo\\sobe");
        Path destino = Paths.get("\\\\hermes\\DCPD\\BKP-SOBE\\teste");

        Files.walkFileTree(origem, new CopyDir(origem, destino, retorno));
    }
    */
}

A cópia funciona, o problema é que a janela que contém a JTextArea fica travada e não faz o append do texto toda vez que um arquivo ou diretório é copiado. Ele só escreve depois que a cópia termina por completo. Preciso que escreva arquivo a arquivo.

Alguém pode me ajudar? Seria de grande valia, já tem um tempo que estou quebrando a cabeça e não acho problema semelhante na net. Obrigado.

  • Alguém??? Tenho que trabalhar com multi Thread?

    Eric Julio Silva   10 de nov de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java nio arquivos swing ou faça a sua própria pergunta.