Salut,
J'ai un problème de conception avec une application.
J'ai un controleur et un objet qui fait l'interface avec le serveur.
Le controleur a une méthode boolean login(); qui permet de se loguer. (Sa signature ne peut pas être changée)
En gros, voici mes classes
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
| class controller {
Server s;
boolean login() {
s.sendMessage(...);
wait();
return (connecté ou non)
}
void receiveMessageFromServer(String message) {
// Traitement du message
Si le message a trait avec le login:
notify();
// D'autres types de messages peuvent arriver
}
}
class Server {
Socket s....
void sendMessage() {
s. send(...);
}
Server() {
new Thread([...]);
// Ce thread lit tout ce qui vient du serveur et appelle controller.receiveMessageFromServer();
}
} |
Mon but est donc de bloquer l'execution de login() tant que je n'ai pas reçu de réponse.
Si je lance mon code, j'ai une erreur :
10-05 16:12:22.970: ERROR/AndroidRuntime(842): java.lang.IllegalMonitorStateException: object not locked by thread before wait()
Comment faire pour bloquer ma methode login() en attendant une réponse ? (et dans l'idéal, les autres messages devraient pouvoir être traités en attendant)
Je développe pour Android, mais je ne pense pas que ça ait un rapport.
Merci pour votre aide.
Partager