IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème SWT & thread avec readLine()


Sujet :

Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Problème SWT & thread avec readLine()
    Bonjour,
    Je travaille sur un petit programme client/serveur pour faire du chat. Le programme client a une classe Client (dans la quelle il y a la fonction main), une classe Connexion et d'une classe Gui. L'interface est faite avec SWT. (pour info, je bosse avec Eclipse 3.2)

    J'ai vu plusieurs exemples de petits programmes clients/serveur, mais je ne parviens pas à résoudre mon problème :
    La classe Connexion fonctionne en tant que thread (public class Connexion extends Thread { ... } )
    Voila sa fonction run() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void run(){
    this.gui.display.asyncExec(new Runnable() { //this.gui est un pointeur vers l'instance de la classe Gui dans main
    	            public void run() {
    	            	try {
    		            	String fromServer;
    		            	while ((fromServer = in.readLine()) != null) {
                                          gui.zoneDeTexte.insert(fromServer);
    		            	}
    	            	} catch (IOException e) { }
    	          }});
    }
    et voila la fonction main (dans la classe Client) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static void main(String[] args) {
    		// GUI
    		gui.Gui gui = new gui.Gui();
     
    		// connection
    		tcp.Connexion connexion = new tcp.Connexion(gui);
     
    		gui.createSShell();
    		gui.sShell.open();
     
    	    while (!gui.sShell.isDisposed()) {
    	    	if (!gui.display.readAndDispatch())
    	    		gui.display.sleep();
    	    }
     
    	    System.out.println("finishing...");
    	    gui.display.dispose();
    	}

    dans l'interface, il y a un bouton "Se connecter" qui, lorsque on appuie dessu lance connexion.connect() qui connecte le client au serveur (ça ça marche bien) et démarre le thread en faisant this.start();
    En fait, tout marche bien à une chose près : la commande in.readLine() dans la fonction run() bloque tout le reste en attendant de recevoir quelque chose du serveur. L'interface est complètement figée.
    Si j'enlève :
    while ((fromServer = in.readLine()) != null) { gui.zoneDeTexte.insert(fromServer);
    }
    tout fonctionne bien à ceci près que les messages envoyés par le serveur ne seront (par conséquent) pas affichés...
    Que dois-je faire pour que la fonction in.readLine() ne fige pas l'interface ? Je pensais que le simple fait que ce soit dans un thread ferait que l'interface peut se rafraichir en parellèle, mais non
    Comment faire ?

    merci d'avance

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je viens de répondre tout seul à ma question, c'était tout bête

    En fait, la fonction run() n'allait pas, il fallait qu'elle soit comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void run(){
    	            	try {
    		            	String fromServer;
    		            		while ((fromServer = in.readLine()) != null) {
    		            			this.gui.display.asyncExec(new Runnable(){
    		            	                      public void run() {
                                                               gui.discutionArea.insert("plopppppp");
    		            	                      }
    		            			});
    		            		}
    	            	} catch (IOException e) { }
    		}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OpenGL 3.x] [JOGL] Problème de multi-thread avec les VBO
    Par darksamus1 dans le forum OpenGL
    Réponses: 4
    Dernier message: 02/07/2013, 12h47
  2. Réponses: 7
    Dernier message: 12/06/2011, 07h14
  3. Problème de threads avec RCP (SWT inside)
    Par slashmax dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 11/07/2008, 15h00
  4. Problème pour stopper thread avec runnable
    Par fabou3377 dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/03/2008, 13h43
  5. [Avis aux pros !] Problèmes de la VCL avec les threads
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/02/2006, 22h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo