2011-02-09 4 views
0



Actuellement, je travaille sur un projet qui nécessite une programmation socket, mais malheureusement lorsque j'utilise pour appeler l'instruction socket et lire quelque chose dans le flux d'entrée de la socket ou écrire quelque chose l'application plantage et rien ne fonctionnera, en fait le problème est que le code qui gère l'action des boutons et d'autres choses ne fonctionnera pas, l'exécution s'arrêtera à la ligne qui appelle la méthode qui crée les lectures le flux d'entrée de socket . J'ai résolu ce problème il y a quelques temps avec le thread et en mettant l'instruction qui fonctionne avec le socket dans la méthode run. l'interface fonctionne correctement mais je n'ai toujours pas la bonne fonctionnalité. voici les deux lignes d'appeler la méthodecode après instruction socket ne s'exécute pas

Conection_Manager cm = new Conection_Manager(jTextField1.getText()); 
jTextArea1.setText(cm.getMessage()); 

dans la première ligne que j'utilise pour appeler la méthode dans ma classe de gestionnaire de connexion ou les données sur la prise seront lues correctement et je peux voir que par l'impression de ces données , mais quand dans la ligne suivante, je veux définir la zone de texte avec la chaîne tout accident. si cela a du sens j'utilise ces deux lignes de déclaration dans un Jdialog Merci d'avance

Répondre

0

Il est probablement bloqué en attente de l'écriture de quelque chose sur le socket. C'est pourquoi il semble s'écraser, alors qu'en fait il attend les données. avez-vous vérifié que les données sont en cours d'écriture sur le socket?

également, le bloc sockets serveur jusqu'à ce qu'une connexion est reçue si vous faites tout en un seul fil (sans Exécuteur, par exemple)

0

Je devine que par s'écraser vous dire qu'il se bloque. C'est parce que vous essayiez d'exécuter de longues opérations à l'intérieur de ce qui est appelé le fil d'envoi d'événements, qui gère tous les événements Swing. Votre solution avec création d'un nouveau thread pour la connectivité socket est correcte, mais au lieu d'attendre la fin du thread (encore une fois, en bloquant EDT), vous devez mettre à jour l'interface graphique à partir du thread engendré.

Mais attention, c'est compliqué, car Swing n'est généralement pas sûr pour les threads, ce qui signifie que vous ne pouvez pas simplement mettre à jour les contrôles d'autres threads. Essayez SwingWorker et assurez-vous de lire sur EDT, par exemple: http://java.sun.com/developer/technicalArticles/Threads/swing.