Question

Je ne suis pas un développeur java, mais je dois écrire un petit applet pour télécharger le fichier via FTP (En fait, je suis un développeur web). Tout fonctionne très bien, sauf pour la façon dont les messages de rétroaction sont affichés. Permettez-moi de vous expliquer avec un exemple:

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

Quand je tente d'exécuter ce code, la connexion est établie (après que les fichiers de téléchargement I de connexion sans problème), mais à l'intérieur du JPanel myJpanel Je lis immeditaly « connecté » (altought il faut plusieurs secondes à connexion) et je ne vois jamais la chaîne « Connexion au serveur distant ».

Il me semble que la méthode JPanel setText est tamponnées d'une certaine façon.
Comment puis-je afficher des messages en temps réel?

(j'ai essayé de faire System.out.println pour tester et il fonctionnait très bien!)
Merci

Était-ce utile?

La solution

  

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

code exécuté dans un écouteur d'exécute événement sur l'EDT. Le problème est que la tâche longue course bloque Swing EDT. Ainsi, l'interface graphique ne devient jamais une chance de se repeindre.

Lisez la section du tutoriel Swing sur Concurrency plus d'informations et pour une solution. La solution de base est de créer un thread séparé pour la tâche à long en cours d'exécution.

Ceci est également la raison pour laquelle System.out.println (..) fonctionne, car il exécute sur un autre fil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top