Pergunta

Não sou desenvolvedor de Java, mas preciso escrever um pequeno applet para fazer upload de arquivo via FTP (na verdade, sou um desenvolvedor da web). Tudo funciona bem, exceto pela maneira como as mensagens de feedback são exibidas. Deixe-me explicar com um exemplo:

Se eu escrevi Starsingh assim, dentro de um método (controlado por um evento de clique)

//....
myJpanel.setText("Connecting to remote server");

//actually, it's surrounded by try-catch statement
myFtpObject.connect(); //this is taken from a third part package 
myJpanel.setText("Connected")

Quando tento executar este código, a conexão é definida (após essa conexão, carrego arquivos sem problemas), mas dentro do jpanel myjpanel Eu leia imediatamente "conectado" (é preciso vários segundos para conectar) e nunca vejo a string "conectando ao servidor remoto".

Parece -me que o método JPanel SetText é tamponado de alguma forma.
Como posso exibir mensagens em tempo real?

(Eu tentei fazer system.out.println para testes e funcionou muito bem!)
Obrigado

Foi útil?

Solução

Se eu escrevi Starsingh como esse dentro de um método (controlado por um evento de clique)

O código executado em um ouvinte de evento é executado no EDT. O problema é que a tarefa de longa execução está bloqueando o Swing EDT. Portanto, a GUI nunca tem a chance de se repetir.

Leia a seção do tutorial de balanço sobre Simultaneidade Para mais informações e para uma solução. A solução básica é criar um encadeamento separado para a tarefa de longa execução.

É também por isso que o System.out.println (..) funciona, porque ele é executado em um encadeamento diferente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top