2010-10-28 18 views
0

Je ne suis pas un développeur Java, mais j'ai besoin d'écrire une petite applet pour télécharger le fichier via ftp (en fait, je suis un développeur web). Tout fonctionne bien, sauf pour la façon dont les messages de commentaires sont affichés. Permettez-moi de vous expliquer avec un exemple:La méthode jtextarea.settext() est-elle mise en mémoire tampon?

si je l'ai écrit sometingh comme ça, à l'intérieur d'une méthode (contrôlée par un événement click)

//.... 
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") 

Lorsque je tente d'exécuter ce code, la connexion est établie (après connexion Je télécharge des fichiers sans problème), mais à l'intérieur du Jpanel myJpanel Je lis immeditalement "connected" (il faut plusieurs secondes pour se connecter) et je ne vois jamais la chaîne "Connecting to remote server".

Il me semble que la méthode setText de Jpanel est tamponnée d'une manière ou d'une autre.
Comment puis-je afficher des messages en temps réel?

(j'ai essayé de faire System.out.println pour les tests et il a très bien fonctionné!)
Merci

Répondre

1

si je l'ai écrit sometingh comme l'intérieur d'une méthode (contrôlée par un événement click)

Le code exécuté dans un écouteur d'événement s'exécute sur l'EDT. Le problème est que la tâche de longue durée bloque l'EDT Swing. L'interface graphique n'a donc jamais l'occasion de se repeindre.

Lisez la section du tutoriel Swing sur Concurrency pour plus d'informations et pour trouver une solution. La solution de base consiste à créer un thread séparé pour la tâche longue.

C'est aussi pourquoi System.out.println (..) fonctionne, car il s'exécute sur un thread différent.