Bonjour à tous,
Je débute en Java, donc je poste sur ce forum Débutants
J'ai évidemment un problème, sinon je ne posterai pas !
Je vais tenter une explication claire.
Je développe pour mon école une application client/serveur en Java. J'ai donc une application cliente, une application serveur et une base de données.
Dans mon application Client, j'ai des interfaces graphiques, et une classe utilisant un Socket pour transmettre des données et en recevoir. Le problème se situe ici :
1 : Lorsque mon user clique sur un bouton, il envoie un objet au Socket.
2 : le serveur reçoit l'objet, traite la demande, et retourne un objet au client.
3 : le client reçoit l'objet et le transmet à l'interface graphique demandeuse.
4 : l'interface graphique poursuit l'action de son listener (affichage de la page suivante avec l'objet reçu en paramètre).
Jusqu'à l'étape 2, pas de problème.
Mais je n'arrive pas à ce que mon interface graphique attende la réception de l'objet pour continuer.
Je pense que je dois utiliser les méthodes wait() et notify() mais je ne parviens pas à comprendre clairement comment elles fonctionnent... Help ?
Voilà le code du listener (en commentaire les actions souhaitées mais que je n'arrive pas à réaliser) :
Et ici le code de la classe utilisant le Socket :
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 public class ConnectActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent arg0) { Auth usr = null; try { usr = new Auth(txtLogin.getText(), String.valueOf(txtPassword .getPassword())); usr.setAction(10); ClientData client = new ClientData(); client.start(); Utilisateur r = (Utilisateur) client.send(usr); // MISE A JOUR DE LA GUI // Ce code doit être exécuté seulement une fois que la méthode // send s'est terminée (et donc que l'objet retour est bien // créé) userInfo = new UserInfo(myFrame, r); userMenu = new UserMenu(myFrame); myFrame.setMainPanel(userInfo); myFrame.setMenuPanel(userMenu); } catch (Exception e) { e.printStackTrace(); } } }
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 public Data send(Data output) { this.output = output; Data input; try { // Envoi de la Data vers le serveur oos = new ObjectOutputStream(sock.getOutputStream()); oos.writeObject(output); oos.flush(); System.out.println("Client Data Sent : " + o); // Réception de la réponse du serveur ois = new ObjectInputStream(sock.getInputStream()); while (true) { try { input = (Data) ois.readObject(); System.out.println("Client Data Received : " + i); } catch (Exception e) { e.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } return input; }
Partager