Bonjour
J'ai codé une application client/serveur qui marchait très bien sur plein de PC différents depuis 2 semaines sans aucune erreur. Aujourd'hui, je démarre le programme et il marche mais avec des exceptions !
Ce qui se passe c'est :
le client envoie une chaine au serveur. Pas de problème.
Mais ensuite, j'ai une exception qui dit :
Exception in thread-4
puis le dialogue client/serveur continue normalement sans aucun problème. Arrivé au bout de la discussion apparait une NullPointerException.
Les deux exceptions sont côtés client uniquement.
Je vous explique rapidement le modèle du code. La classe Gui (interface graphique) lance un thread de la classe Partie. Partie appelle Communication qui lance un nouveau thread d'écoute. Voici la méthode qui écoute le serveur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
public void waitFromServer()
{
String msg = "" ;
// tant qu'on recoit pas LOOSER
do
{
try{
boolean stop = false ;
// recevoir tant qu'on recoit pas OK
while(stop == false)
{
msg = fromServer.readLine();
// on arrete si on recoit OK ou KO
if(msg.equals("KO") || msg.equals("OK"))
{
System.out.println("<-"+msg);
stop = true ;
}
// sinon on lit les donnees
else if(msg.equals("TURN"))
{
System.out.println("<-"+msg);
sendData("PLAY TREAT");
}
else
{
System.out.println("<-"+msg);
}
}
}catch(IOException ioe){ System.out.println("Error reading from server"); }
}while(!msg.equals("LOOSER") && !msg.equals("QUIT"));
try{
clientSock.close();
}catch(IOException io){ System.out.println("Error closing socket"); }
} |
Peu importe la signification des messages
...
Donc le client affiche l'exception sur le thread-4 puis reçoit le "OK" du serveur et ça continue normalement avec la réception des autres chaines de la part du serveur après l'envoi du client! Et à la fin, quand le serveur envoie "QUIT", la NullException apparait sur la ligne suivante :
if(msg.equals("KO") || msg.equals("OK"))
C'est très étrange, je n'ai rien touché ... Voyez-vous quelque chose de bizarre ? En plus, côté serveur, y'a aucun problème...
EDIT : J'ai rajouté ceci :
1 2 3
|
if(msg == null)
System.out.println("msg est null"); |
juste après le readLine() et bien le client reçoit la dernière ligne qui est "QUIT" et pourtant, il m'affiche "msg est null". Si msg = null, comment le client a-t-il pu dans ce cas afficher "QUIT" qui est justement contenu dans msg ....
Il affiche d'abord "QUIT" puis "msg est null". Ca veut dire que le fait de recevoir "QUIT" n'a pas arrêté la boucle et pourtant, ce n'est pas logique... Ca devrait l'arrêter et pas repartir pour un tour ...
Edit2 : je ne sais pas si on peut appeler ça résoudre le problème mais si je rajoute un :
catch (NullPointerException np) { np.toString() ; }
à la fin du code, je n'ai plus d'exception et le code tourne... Mais n'est-ce pas masquer le problème que de faire ainsi ?
Nas'
Partager