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

avec Java Discussion :

Erreur NullPointerException incompréhensible


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut Erreur NullPointerException incompréhensible
    Bonjour,
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    File entryFile = new File("C:\\www.xml");
    cl1 essai = new cl1();
    String logPass ="";
    String userCherch = "ladjm";
    logPass = essai.recherche(userCherch, entryFile);
    logPass = "lulu";
    textLog.setText("Identifiant : "+logPass);

    Voici mon code, la fonction recherche ne fonctionne pas et ne renvoi rien.
    Dans ce code le JTextField affiche bien "Identifiant : lulu". Pourtant quand je commente
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    //logPass = essai.recherche(userCherch, entryFile);
    (la ligne qui ne fonctionne pas) le compilateur me dit :
    Exception in thread "main" java.lang.NullPointerException
    at essai.main(essai.java:39)
    Si quelqu'un a une idée de la provenance de mon problème...

    Merci

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Et c'est quoi le code de essai.java ? (spécialement la ligne 39)
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Je pense que ce n'est pas logPass qui pose problème mais textLog. (Qu'il soit null ou pas, la chaîne résultante de "Identifiant : "+logPass vaudra au pire "Identifiant : null")

    Peux-tu nous montrer où tu l'initialises?

    Par intuition, je dirais que c'est ta fonction recherche qui initialise textLog donc en commentant la ligne, il ne serait plus initialisé -> NPE

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Et c'est quoi le code de essai.java ? (spécialement la ligne 39)
    La ligne 39 de essai.java est :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    textLog.setText("Identifiant : "+logPass);

    @liouan

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	private void initialize() {
    		frame = new JFrame();
    		frame.setBounds(100, 100, 450, 300);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		textLog = new JTextField();
    		frame.getContentPane().add(textLog, BorderLayout.NORTH);
    		textLog.setColumns(10);	
    	}
    Que veux dire NPE ?

    Merci pour vos réponse.

  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Carlito08 Voir le message
    La ligne 39 de essai.java est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //logPass = essai.recherche(userCherch, entryFile);
    [...]

    Que veux dire NPE ?
    Donc tu veux dire qu'il te mentionne une NullPointerException sur ta ligne commentée. Je crois que ton IDE perd les pédales.

    NPE = NullPointerException
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    (NPE : NullPointerException)

  7. #7
    Nouveau membre du Club Avatar de TheZopo
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Un pointeur qui pointe sur rien, c'est une erreur d'inattention très fréquente sur l'initialisation.
    Tu n'a pas initialiser un tableau par exemple, donc la fonction suivante cherche dans le vide...

    Pourrais-tu nous montrer tout ton code source, parce que là on peut pas vraiment t'aider...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    @Robin56 C'est moi perd les pédales , je viens d'éditer mon post.

    @liouan A ok merci.


    Voici tout mon code essai.java :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    import java.awt.EventQueue;
    import javax.swing.JFrame;
    import java.io.File;
    import javax.swing.JTextField;
    import java.awt.BorderLayout;
     
    public class essai {
     
    	private JFrame frame;
    	private static JTextField textLog;
    	private static JTextField textPass;
     
    	/**
             * Launch the application.
             */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					essai window = new essai();
    					window.frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
     
    File entryFile = new File("C:\\www.xml");
    cl1 essai = new cl1();
    String logPass ="";
    String userCherch = "ladjm";
    logPass = essai.recherche(userCherch, entryFile);
    logPass = "lulu";
    textLog.setText("Identifiant : "+logPass);
    	}
     
    	/**
             * Create the application.
             */
    	public essai() {
    		initialize();
    	}
    	/**
             * Initialize the contents of the frame.
             */
    	private void initialize() {
    		frame = new JFrame();
    		frame.setBounds(100, 100, 450, 300);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		textLog = new JTextField();
    		frame.getContentPane().add(textLog, BorderLayout.NORTH);
    		textLog.setColumns(10);
     
    		textPass = new JTextField();
    		frame.getContentPane().add(textPass, BorderLayout.SOUTH);
    		textPass.setColumns(10);
    	}
    }

  9. #9
    Nouveau membre du Club Avatar de TheZopo
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Est-ce que tu exécute bien ta fonction initialize();, avant ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textLog.setText("Identifiant : "+logPass);
    ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Oui je pense vu qu'elle se trouve dans le constructeur :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public essai() {
    initialize();
    }

    Non ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Tu as apparemment une classe qui s'appelle cl1. Peux-tu nous donner son code également ?

    Note : Les noms de classes en Java doivent traditionellement commencer par une majuscule.

  12. #12
    Nouveau membre du Club Avatar de TheZopo
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Effectivement, tu éditais ton message pendant que j'écrivais le mien...
    Mais pourquoi avoir fait cela ? Tu a soif de te compliquer la vie ?

    Questions idiotes :
    A quoi sert cette parenthèse fermante, ligne 26 ?
    Et pourquoi tu a fait une fonction dans une fonction ? (run dans le main...)

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    @liouan Merci je ne savais pas, je débute.

    Voici mon code cl1 :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    import org.jdom2.xpath.XPath;
     
     
    public class cl1
    {
        public cl1() {
        }  
        String recherche(String userACherche, File _FilePath)
        {
        	String logPass="";
            org.jdom2.Document document = null ;
            try {
                SAXBuilder sxb = new SAXBuilder();
                document = sxb.build(_FilePath);
            } catch (IOException e) {
                System.out.println("Erreur lors de la lecture du fichier " 
    				+ e.getMessage() );
                e.printStackTrace();
            } catch (JDOMException e){
                System.out.println("Erreur lors de la construction du fichier JDOM " 
    				+ e.getMessage() );
                e.printStackTrace();
            }
            try {
                Element racine = document.getRootElement();
                XPath xpa = XPath.newInstance("//User");
                List results = xpa.selectNodes(racine) ;
                Iterator iter = results.iterator() ;
                Element noeudCourant = null;
                while (iter.hasNext())
                {
                    noeudCourant = (Element) iter.next();                  
                    xpa = XPath.newInstance("./@uid");
                    if(xpa.valueOf(noeudCourant) == userACherche)
                    {
                    	logPass = xpa.valueOf(noeudCourant);
     
                    	/*xpa = XPath.newInstance("./@password");
                    	logPass[1] = xpa.valueOf(noeudCourant);*/
                    	break;
                    }
                 }
            } catch (JDOMException e) {
                System.out.println("Erreur JDOM " + e.getMessage() );
                e.printStackTrace();            
            }
        	return logPass;
        }
    }

    @TheZopo Ceci n'est pas de moi c'est mon IDE (eclipse) qui l'a écris à la création de ma classe.

  14. #14
    Nouveau membre du Club Avatar de TheZopo
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Ha ? N'empêche que ça sert a rien, mais bon

    Je trouve ça bizarre :
    Tu a fermer la méthode juste après l'avoir ouverte, elle ne contiens rien du coup...

    Ha et enlève la parenthèse (L. 26), j'ai beau chercher je ne vois pas à quoi elle sert...

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    @TheZopo Un oubli La parenthèse ligne 26 referme la parenthèse ouverte ligne 17 juste avant "new".

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Points : 89
    Points
    89
    Par défaut
    Peux-tu retirer ces lignes du main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    File entryFile = new File("C:\\www.xml");
    cl1 essai = new cl1();
    String logPass ="";
    String userCherch = "ladjm";
    logPass = essai.recherche(userCherch, entryFile);
    logPass = "lulu";
    textLog.setText("Identifiant : "+logPass);
    et les mettre à la fin de la méthode initialize comme ceci :

    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
     
    	private void initialize() {
    		frame = new JFrame();
    		frame.setBounds(100, 100, 450, 300);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		textLog = new JTextField();
    		frame.getContentPane().add(textLog, BorderLayout.NORTH);
    		textLog.setColumns(10);
     
    		textPass = new JTextField();
    		frame.getContentPane().add(textPass, BorderLayout.SOUTH);
    		textPass.setColumns(10);
     
    		File entryFile = new File("C:\\www.xml");
    		cl1 essai = new cl1();
    		String logPass ="";
    		String userCherch = "ladjm";
    		logPass = essai.recherche(userCherch, entryFile);
    		logPass = "lulu";
    		textLog.setText("Identifiant : "+logPass);
    	}
    puis retirer les mots-clé static sur ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	private static JTextField textLog;
    	private static JTextField textPass;
    et me dire si tu as toujours le problème?

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    @liouan Il n'y a plus le problème, merci, mais sa venait de quoi ?

  18. #18
    Nouveau membre du Club Avatar de TheZopo
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 29
    Points : 34
    Points
    34
    Par défaut
    Pas grave, met bien l'accolade a la fin.
    Tu devrais te renseigner sur les conventions d'écriture, ton code sera ainsi beaucoup plus lisible, par exemple :
    - MaClass
    - MonObjet
    - maVariable
    - MADEFINE

    Bonne continuation

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    @TheZopo Comme je l'ai dit je débute, merci pour le conseil et merci pour ton aide

  20. #20
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    @Carlito08

    1- Vire la méthode initialize() et met son contenu dans le constructeur essai.
    2- La variable window que tu instancie dans public void run() ne sera visible que cette bloc donc tu auras toujours un NullPointerException à la ligne **. Déplace ces lignes après le bloc EventQueue.invokeLater(new Runnable() ... dans le bloc de run().

    Citation Envoyé par TheZopo Voir le message
    Ha ? N'empêche que ça sert a rien, mais bon

    Je trouve ça bizarre :
    Tu a fermer la méthode juste après l'avoir ouverte, elle ne contiens rien du coup...

    Ha et enlève la parenthèse (L. 26), j'ai beau chercher je ne vois pas à quoi elle sert...
    C'est un constructeur, y a rien de bizarre .

    A+.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Erreur Windows : incompréhension !
    Par Matalobos dans le forum GTK+ avec C & C++
    Réponses: 23
    Dernier message: 03/05/2007, 15h12
  2. Réponses: 3
    Dernier message: 25/04/2007, 14h22
  3. Erreur javascript incompréhensible
    Par guidav dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/01/2007, 10h12
  4. erreur javascript incompréhensible
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/08/2005, 16h50
  5. erreur 104 incompréhensible
    Par shadowmoon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/05/2005, 16h16

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