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

Langage Java Discussion :

Appel d'une méthode d'une classe à partir d'une autre


Sujet :

Langage Java

  1. #1
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut Appel d'une méthode d'une classe à partir d'une autre
    Salut,
    J'ai créé une interface (classe Idf) ayant un bouton qui permet de lancer une classe Server (serveur de chat) et un bouton pour la déconnexion.
    Quand j'appuie sur le bouton de connexion, mon seveur est lancé grâce à l'instruction Ce lancement permet l'ouverture de sockets, l'obtention de flux etc.
    Je dispose d'une méthode terminate() dans ma classe Server qui est censée terminer la connexion (fermeture de la socket et des flux).
    J'aimerai que lorsque j'appuie sur le bouton de déconnexion, la méthode terminate() soit appelée sur l'objet Server créé lors de la connexion et je ne vois pas comment faire.
    Mon problème est l'appel de la méthode terminate() de la classe Server à partir de la classe Idf sur l'objet Server créé lors de la connexion.
    Merci pour votre aide.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Points : 130
    Points
    130
    Par défaut
    Salut,

    Je ne suis pas sûr de vraiment comprendre ce que tu veux faire mais si dans l'implémentation de ton interface Idf, tu as une instance de Server server... A la connexion, tu as :

    Et plus loin, tu auras :

    Est-ce que ma réponse te convient ?

    A plus,
    Mathieu

  3. #3
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par M@th Voir le message
    Salut,

    Je ne suis pas sûr de vraiment comprendre ce que tu veux faire mais si dans l'implémentation de ton interface Idf, tu as une instance de Server server... A la connexion, tu as :

    Et plus loin, tu auras :

    Est-ce que ma réponse te convient ?

    A plus,
    Mathieu
    pas vraiment, car l'instance du Server doit être lancée lors du clique sur le bouton de connexion.
    Code Java : 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
    31
    32
    33
    34
    35
    36
    public void actionPerformed(ActionEvent ae){
    		if ((ae.getSource() == connect) || (ae.getSource() == connection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(true);
    					disc.setEnabled(true);
    					disconnection.setEnabled(true);
    					connect.setEnabled(false);
    					conn.setEnabled(false);
    					connection.setEnabled(false);
    					cancel.setEnabled(false);
    					can.setEnabled(false);
    					quit.setEnabled(false);
    					new Server();
    				}
    			};
    			t.start();
    		}
    		else if ((ae.getSource() == disconnect) || (ae.getSource() == disconnection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(false);
    					disc.setEnabled(false);
    					disconnection.setEnabled(false);
    					connect.setEnabled(true);
    					conn.setEnabled(true);
    					connection.setEnabled(true);
    					cancel.setEnabled(true);
    					can.setEnabled(true);
    					quit.setEnabled(true);
    //je ne sais pas quoi mettre ici
    				}
    			};
    			t.start();
    		}
    }
    Si je mets un truc du genre Server serv = new Server(); dans mon premier if
    Un appel de serv dans le second ne sera pas reconnu.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Bonjour,

    Pourquoi ne pas mettre ton objet Server en variable de classe ?

  5. #5
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 108
    Points : 3 203
    Points
    3 203
    Par défaut
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Server serv = null;
    
    public void actionPerformed(ActionEvent ae){
    		if ((ae.getSource() == connect) || (ae.getSource() == connection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(true);
    					disc.setEnabled(true);
    					disconnection.setEnabled(true);
    					connect.setEnabled(false);
    					conn.setEnabled(false);
    					connection.setEnabled(false);
    					cancel.setEnabled(false);
    					can.setEnabled(false);
    					quit.setEnabled(false);
    					serv = new Server();
    				}
    			};
    			t.start();
    		}
    		else if ((ae.getSource() == disconnect) || (ae.getSource() == disconnection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(false);
    					disc.setEnabled(false);
    					disconnection.setEnabled(false);
    					connect.setEnabled(true);
    					conn.setEnabled(true);
    					connection.setEnabled(true);
    					cancel.setEnabled(true);
    					can.setEnabled(true);
    					quit.setEnabled(true);
    
                                                            if(serv != null) serv.terminate();
    
    				}
    			};
    			t.start();
    		}
    }
    Systèmes d'Informations Géographiques
    - Projets : Unlicense.science - Apache.SIS

    Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons

  6. #6
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Benouze Voir le message
    Bonjour,

    Pourquoi ne pas mettre ton objet Server en variable de classe ?
    Citation Envoyé par eclesia Voir le message
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Server serv = null;
    
    public void actionPerformed(ActionEvent ae){
    		if ((ae.getSource() == connect) || (ae.getSource() == connection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(true);
    					disc.setEnabled(true);
    					disconnection.setEnabled(true);
    					connect.setEnabled(false);
    					conn.setEnabled(false);
    					connection.setEnabled(false);
    					cancel.setEnabled(false);
    					can.setEnabled(false);
    					quit.setEnabled(false);
    					serv = new Server();
    				}
    			};
    			t.start();
    		}
    		else if ((ae.getSource() == disconnect) || (ae.getSource() == disconnection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(false);
    					disc.setEnabled(false);
    					disconnection.setEnabled(false);
    					connect.setEnabled(true);
    					conn.setEnabled(true);
    					connection.setEnabled(true);
    					cancel.setEnabled(true);
    					can.setEnabled(true);
    					quit.setEnabled(true);
    
                                                            if(serv != null) serv.terminate();
    
    				}
    			};
    			t.start();
    		}
    }
    J'ai déjà essayé cette approche, cependant l'objet serv reste toujours null.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Surprenant.

    Tu es certain d'avoir bien codé :
    et non pas :
    comme dans le message initial ?

  8. #8
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Benouze Voir le message
    Surprenant.

    Tu es certain d'avoir bien codé :
    et non pas :
    comme dans le message initial ?
    sûr et certain
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Luxembourg

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Points : 130
    Points
    130
    Par défaut
    Salut,

    Modifie ton constructeur de ta classe Server. Tout ce qui concerne l'initialisation, mets le dans une méthode séparée (genre init()).

    De cette manière, tu auras :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    Server serv = new Server();
    
    public void actionPerformed(ActionEvent ae){
    		if ((ae.getSource() == connect) || (ae.getSource() == connection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(true);
    					disc.setEnabled(true);
    					disconnection.setEnabled(true);
    					connect.setEnabled(false);
    					conn.setEnabled(false);
    					connection.setEnabled(false);
    					cancel.setEnabled(false);
    					can.setEnabled(false);
    					quit.setEnabled(false);
    					serv.init();
    				}
    			};
    			t.start();
    		}
    		else if ((ae.getSource() == disconnect) || (ae.getSource() == disconnection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(false);
    					disc.setEnabled(false);
    					disconnection.setEnabled(false);
    					connect.setEnabled(true);
    					conn.setEnabled(true);
    					connection.setEnabled(true);
    					cancel.setEnabled(true);
    					can.setEnabled(true);
    					quit.setEnabled(true);
                                            serv.terminate();
    				}
    			};
    			t.start();
    		}
    }
    A plus,
    Mathieu

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Mais non ça ne marchera pas puisque ton Server est dans un Thread séparé !

    Et pour arrêter ton Server tu crées encore un nouveau Thread !!!

    Pourquoi as-tu besoin de le lancer dans un nouveau Thread ?

    Tu peux déjà commencer par faire que Server implémente Runnable.

  11. #11
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par M@th Voir le message
    Salut,

    Modifie ton constructeur de ta classe Server. Tout ce qui concerne l'initialisation, mets le dans une méthode séparée (genre init()).

    De cette manière, tu auras :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    Server serv = new Server();
    
    public void actionPerformed(ActionEvent ae){
    		if ((ae.getSource() == connect) || (ae.getSource() == connection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(true);
    					disc.setEnabled(true);
    					disconnection.setEnabled(true);
    					connect.setEnabled(false);
    					conn.setEnabled(false);
    					connection.setEnabled(false);
    					cancel.setEnabled(false);
    					can.setEnabled(false);
    					quit.setEnabled(false);
    					serv.init();
    				}
    			};
    			t.start();
    		}
    		else if ((ae.getSource() == disconnect) || (ae.getSource() == disconnection)){
    			Thread t = new Thread(){
    				public void run(){
    					disconnect.setEnabled(false);
    					disc.setEnabled(false);
    					disconnection.setEnabled(false);
    					connect.setEnabled(true);
    					conn.setEnabled(true);
    					connection.setEnabled(true);
    					cancel.setEnabled(true);
    					can.setEnabled(true);
    					quit.setEnabled(true);
                                            serv.terminate();
    				}
    			};
    			t.start();
    		}
    }
    A plus,
    Mathieu
    Je pense que ça marcherait. Merci.
    Citation Envoyé par Duc Lebowski Voir le message
    Mais non ça ne marchera pas puisque ton Server est dans un Thread séparé !

    Et pour arrêter ton Server tu crées encore un nouveau Thread !!!

    Pourquoi as-tu besoin de le lancer dans un nouveau Thread ?

    Tu peux déjà commencer par faire que Server implémente Runnable.
    A la base, j'ai utilisé le thread pour éviter que le bouton reste pressé lors du clique et du lancement du Server.
    C'est vrai que je n'ai pas fait attention au fait que le Server est lancé séparément.
    Je ne suis pas habituer à l'utilisation de threads. Si je lance mon Server dans un nouveau thread, comment pourrais-je faire pour fermer la connexion à l'intérieur du deuxième if ? Merci.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Si ton serveur implémente Runnable, tu dois pouvoir faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Server serv = new Thread(new Server());
     
    // Pour activer
    serv.run();
     
    // Pour terminer
    serv.terminate();

  13. #13
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Même si le serveur implémente Runnable il n'est pas possible de faire
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    Server serv = new Thread(new Server());
    étant donné qu'il y aura un problème de typage.
    J'ai un peu changé l'organisation de mes classes et j'arrive à faire ce que je veux. Merci à tous pour votre aide.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2014, 11h04
  2. Réponses: 2
    Dernier message: 29/10/2013, 12h19
  3. Réponses: 3
    Dernier message: 20/04/2009, 09h13
  4. Réponses: 6
    Dernier message: 12/02/2008, 14h56
  5. Réponses: 5
    Dernier message: 09/03/2007, 21h14

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