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

Composants Java Discussion :

Récupérer la valeur d'un champ de mot de passe dans une autre classe


Sujet :

Composants Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 27
    Points
    27
    Par défaut Récupérer la valeur d'un champ de mot de passe dans une autre classe
    Bonjour,

    Je créé une petite JApplet en java à partir de NetBeans 6.1, sans utiliser l'éditeur visuel, et je me retrouve bloqué au JButtons, car leur actions se trouvent définies dans une autre classe que la leur.

    J'ai besoin de récupérer la valeur d'un champ de mot de passe(JPassword Password) lorsque l'on clique sur un bouton (JButton Validation).
    J'ai essayé quelques trucs, aucun n'a marché, étant débutant, je me doute qu'il existe une solution simple à ce genre de truc.

    Voici mon code (tout est dans loginBox() ):

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    package engine;
    import javax.swing.JApplet;
    import javax.swing.*;
    public class Main extends JApplet {
     
        public void init() {
            try{
                java.awt.EventQueue.invokeAndWait(new Runnable(){
                    public void run(){
                        loginBox(0);
                    }
                });
            }catch(Exception e){
                // Sorry, but we can't print anything anyway,
                // so be a good fisher : catch it and then let it go.
            } // catch's
        } // init()'s
        private void loginBox(int Tries){
                getContentPane().removeAll();
                repaint();
                JLabel Consigne = new JLabel();
                       Consigne.setBounds(0,0,250,21);
                       Consigne.setText("Please enter your password :");
     
                JLabel Echec = new JLabel();
                       Echec.setBounds(60,72,150,21);
                       Echec.setText("Wrong password.");
     
                JPasswordField Password = new JPasswordField();
                               Password.setBounds(21,21,208,30);
                String pass = new String(Password.getPassword());
                JButton Validation = new JButton();
                        Validation.setBounds(98,51,54,21);
                        Validation.addActionListener(new java.awt.event.ActionListener() {
                                   public void actionPerformed(java.awt.event.ActionEvent evt) {
                                       loginRequest("username", loginBox(1).pass);}
                        });
     
                getContentPane().setLayout(null);
                getContentPane().add(Consigne);
                getContentPane().add(Password);
                getContentPane().add(Validation);
                if(Tries != 0){
                    getContentPane().add(Echec);
                }
                Validation.setText("Ok"); // We will set an image here later...
        } // loginBox's
        private void loginRequest(String Username ,String Password){
            boolean ServerAnswer = false;
            if(Password != "nunavut"){
            ServerAnswer = false;
            }
            else{
            ServerAnswer = true;    
            }
            if(ServerAnswer){
                initCombatScene();
            }
            else{
                loginBox(1);
            }
        }
        private void initCombatScene(){
            getContentPane().removeAll();
            repaint();
            // To be continued ...
        }
    } // Class'
    Je tombe sur : "Void cannot be dereferenced", dont le rapport avec ce que j'essaye de faire m'échappe...

    Sauriez vous comment résoudre ça?
    Merci.

  2. #2
    Membre régulier

    Inscrit en
    Septembre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2005
    Messages : 99
    Points : 118
    Points
    118
    Par défaut
    Le type de retour de ta methode loginBox est void donc c'est normal que tu ai cette erreur.

    Essaye plutot ceux ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    final String pass = new String(Password.getPassword());
     
      loginRequest("username", pass );}

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 27
    Points
    27
    Par défaut
    Merci pour la réponse.
    Malheureusement, ça ne fonctionne pas (ou, et c'est plus probable, je ne fais pas ce qu'il faut) :
    Si je ne fais que cette modification, que j'entre nunavut dans le champ de mot de passe et que je clique sur le bouton, ça considère que le pass est mauvais.
    J'ai essayé pour un bon password définit sur "" et null, aucun des deux n'a marché quand j'ai laissé le champ de password vide.
    J'ai essayé d'afficher la valeur reçue par loginRequest en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [...]
        private void loginRequest(String Username ,String Password){
            boolean ServerAnswer = false;
            JLabel Verif = new JLabel();
                   Verif.setBounds(70,0,250,21);
                   Verif.setText(Password);
            JLayeredPane Contenu = new JLayeredPane();
                         Contenu.add(Verif, 1);
            getContentPane().add(Contenu);
    [...]
    Le JLabel ne s'affiche pas, quoi que j'écrive dans le champ de mot de passe.

    edit:
    Ok, après plusieurs recherches, j'ai trouvé que le .getPassword() retourne un char[], j'ai donc mis à jour mon code :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    package engine;
    import javax.swing.JApplet;
    import javax.swing.*;
    import java.net.*;
    import java.util.Arrays;
     
    public class Main extends JApplet {
     
        public void init() {
            try{
                java.awt.EventQueue.invokeAndWait(new Runnable(){
                    public void run(){
                        loginBox(true);
                    }
                });
            }catch(Exception e){
                // Sorry, but we can't print anything anyway,
                // so be a good fisher : catch it and then let it go.
            } // catch's
        } // init()'s
        private void loginBox(boolean FirstTry){
                getContentPane().removeAll();
                repaint();
     
                JLabel Consigne = new JLabel();
                       Consigne.setBounds(0,0,250,21);
                       Consigne.setText("Please enter your password :");
     
                JLabel Echec = new JLabel();
                       Echec.setBounds(60,72,150,21);
                       Echec.setText("Wrong password.");
     
               final JPasswordField Password = new JPasswordField();
                                    Password.setBounds(21,21,208,30);
     
                JButton Validation = new JButton();
                        Validation.setBounds(98,51,54,21);
                        Validation.setText("Ok");
                        Validation.addActionListener(new java.awt.event.ActionListener() {
                                   public void actionPerformed(java.awt.event.ActionEvent evt) {
                                       loginRequest("username", Password.getPassword());
                                   }
                        });
     
                JLayeredPane Contenu = new JLayeredPane();
                             Contenu.add(Consigne, 1);
                             Contenu.add(Password,1);
                             Contenu.add(Validation, 1);
                if(!FirstTry){
                             Contenu.add(Echec);
                }            
                getContentPane().add(Contenu);
        } // loginBox(int Tries)'s
        private void loginRequest(String Username ,char[] Password){
            boolean ServerAnswer = false;
            char[] correctPassword = { 'n', 'u', 'n', 'a', 'v', 'u', 't' };
            if(Arrays.equals(Password, correctPassword)){
                ServerAnswer = true;
            }
            else{
                ServerAnswer = false;    
            }
            if(ServerAnswer){
                initCombatScene();
            }
            else{
                loginBox(false);
            }
        } // loginRequest()'s
        private void initCombatScene(){
                getContentPane().removeAll();
                repaint();
        }//initCombatScene()'s
    } // Main Class'
    Maintenant, ça marche.
    Sauf que (ça serait trop simple...), le bouton pose désormais plus problème qu'avant :
    Avant :
    - Si le password était faux, getContentPane() se vidait et se re-remplissait avec tout les éléments + un message pour indiquer mauvais password.
    - initCombatScene() refusait d'afficher quoi que ce soit une fois getContentPane() vidé si je replaçait pas le bouton de loginBox().
    Maintenant :
    - A partir du moment ou getContentPane() se vide (que se soit dans loginBox() ou initCombatScene(), c'est l'apocalypse : plus rien ne se ré-affiche.
    - Même si je ne vide pas le getContentPane(), si je marque un mauvais mot de passe, il n'affiche plus le message.

    Là, je tique, franchement...
    Le bouton créé une sorte de thread qui s'arrête dès que le bouton est effacé (pas chiant comme truc...) ?

    Dans ces cas là, comment faire ? J'ai besoin de récupérer la valeur du password dans une autre fonction et ensuite de passer à une autre 'scène' et donc de nettoyer le getContentPane() pour afficher totalement autre chose.

    Edit2 :
    Passé la nuit, les idées me viennent au matin, j'ai donc tenté de rendre plus OO mon code, histoire de voir si c'est pas parce que j'utilise n'importe comment Java que ça bug (ou du moins parce que j'essaye de faire un programme qui suit linéairement des instruction).

    Voici donc mon code ré-écrit de manière plus OO (ou du moins selon moi) :

    Main.java :
    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
    package engine;
    import javax.swing.*;
    import java.awt.*;
    import java.net.*;
    import java.util.Arrays;
     
    public class Main extends JApplet {
     
        public void init() {
            try{
                java.awt.EventQueue.invokeAndWait(new Runnable(){
                    public void run(){
                        Login Connexion = new Login();
                        Connexion.LoginBox(true);
                        /*if(Connexion.loginRequest("Username", )){
                            CombatScene StartFight = new CombatScene();
                            StartFight.begins();
                        }*/
                    }
                });
            }catch(Exception e){
                // Sorry, but we can't print anything anyway,
                // so be a good fisher : catch it and then let it go.
            } // catch's
        } // init()'s
    } // Main Class'
    Login.java
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    package engine;
    import javax.swing.*;
    import java.awt.*;
    import java.net.*;
    import java.util.Arrays;
    public class Login extends JApplet {
                //getContentPane().removeAll();
                //repaint();
             public char[] LoginBox(boolean FirstTry){
                JLabel Consigne = new JLabel();
                       Consigne.setBounds(0,0,250,21);
                       Consigne.setText("Please enter your password :");
     
                JLabel Echec = new JLabel();
                       Echec.setBounds(60,72,150,21);
                       Echec.setText("Wrong password.");
     
               JPasswordField Password = new JPasswordField();
                                    Password.setBounds(21,21,208,30);
     
               final JButton Validation = new JButton();
                        Validation.setBounds(98,51,54,21);
                        Validation.setText("Ok");               
               java.awt.event.ActionListener ValidationAction = new java.awt.event.ActionListener() {
                                   public void actionPerformed(java.awt.event.ActionEvent evt) {
                                       Validation.setText("Wat");
                                   }
                        };
                        Validation.addActionListener(ValidationAction);
     
                JLayeredPane Contenu = new JLayeredPane();
                             Contenu.add(Consigne, 1);
                             Contenu.add(Password,1);
                             Contenu.add(Validation, 1);
                if(FirstTry == false){
                             Contenu.add(Echec);
                }  
                getContentPane().add(Contenu);
                // this.loginRequest("username", Password.getPassword());
                while(Validation.getText() == "Ok"){
     
                }
                return Password.getPassword();
        }
     
        public boolean loginRequest(String Username ,char[] Password){
            boolean ServerAnswer = false;
            char[] correctPassword = { 'n', 'u', 'n', 'a', 'v', 'u', 't' };
            if(Arrays.equals(Password, correctPassword)){
                ServerAnswer = true;
            }
            else{
                ServerAnswer = false;    
            }
            if(ServerAnswer){
                return true;
            }
            else{
                this.LoginBox(false);
            }
            return false;
        } // loginRequest()'s
    }
    CombatScene.java :
    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
    package engine;
    import javax.swing.*;
    import java.awt.*;
    import java.net.*;
    import java.util.Arrays;
     
    /**
     *
     * @author williwaw
     */
    public class CombatScene extends JApplet {
        public void begins(){
                getContentPane().removeAll();
                repaint();
                JLabel lol = new JLabel();
                       lol.setText("lol");
                       lol.setBounds(0,0,50,21);
                JLayeredPane Contenu = new JLayeredPane();
                             Contenu.add(lol, 1);
                getContentPane().add(Contenu);
        }
    }
    Avec ça, j'ai pas d'erreurs à la compilation, et sa suit beaucoup plus ce que je cherchait à faire, sauf qu'au final, ça doit pas être bon : ça n'affiche rien.
    Rien du tout. Pas de bouton, pas de label, pas de champ de mot de passe... Je m'attendais à un problème avec le bouton une fois encore, mais non, j'arrive même pas jusque là.


    Pour le moment, je ne vois pas comment je peut le faire, mais je vais tenter de regrouper tout ce qui concerne l'affichage dans une classe -forcément Main.java sinon j'en aurais au moins deux- (on sait jamais... extends trois fois JApplet n'est peut être pas souhaitable).

    N'empêche que je vais avoir du mal à trouver quelqu'un qui lise tout le topic...
    Au fait, je crois que mon topic à plus sa place dans la partie Débutants (que je n'avais pas vue) qu'ici.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 27
    Points
    27
    Par défaut
    Up.
    Je cherche toujours quelqu'un pour m'aider à résoudre ce problème.
    Si le 7 octobre personne n'a répondu, je considérerais ce thread comme trop long et en recréerais un, simplifié, dans la section débutant.

    Edit:
    Après plusieurs jours passés sur le problème (j'ai maintenant un beau code, bien plus propre, résolvant probablement au passage mes problèmes), je me suis rendu compte que je n'étais pas victimes d'illusions :
    Java s'amuse parfois à ne rien afficher (où plutôt il s'amuse rarement à afficher ), sans que j'y soit pour quoi que ce soit.
    J'ai donc passé plusieurs à ré-écrire pleins de fois un code pour au final réaliser qu'il aurait du marcher depuis longtemps.
    En fait, je n'ai jamais remis en cause java, pensant (logiquement) être celui en faute.
    Au final, je me suis aperçu que le "an animation applet that (in its most well known configuration) shows our mascot Duke doing cartwheels: " sur le site des javadocs affichait la même chose que mon Japplet : que dalle (une dalle grise, en fait)...

    Bref, je crois qu'une réinstallation d'OS s'impose...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/05/2011, 09h50
  2. Réponses: 1
    Dernier message: 10/04/2010, 19h04
  3. Réponses: 5
    Dernier message: 09/04/2010, 16h49
  4. Réponses: 7
    Dernier message: 31/01/2008, 12h42
  5. Réponses: 26
    Dernier message: 11/06/2007, 10h57

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