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