IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Synchronisation Panel & InputStream


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Synchronisation Panel & InputStream
    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) :
    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();
    			}
    		}
    	}
    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
     
    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;
     
    		}

  2. #2
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai oublié de préciser que la classe qui utilise le Socket hérite de Thread, évidemment...

  3. #3
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Pourquoi faire un thread si l'UI doit attendre la fin du processus ?

Discussions similaires

  1. Synchroniser les ascenseurs de deux panels.
    Par Rycku dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/02/2007, 12h20
  2. Synchronisation de base de données locale/distante Internet
    Par StefC30 dans le forum Développement
    Réponses: 3
    Dernier message: 25/07/2003, 14h47
  3. Comment faire un panel non rectangulaire?
    Par grincheux dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/05/2003, 15h47
  4. Prob, images, Panels, et form.
    Par CaptainChoc dans le forum Composants VCL
    Réponses: 2
    Dernier message: 10/05/2003, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo