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

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
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.