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

Java Discussion :

Properties Null PointerException


Sujet :

Java

  1. #1
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut Properties Null PointerException
    Bonjour,

    Tout d'abord voilà ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class properties implements I_properties {
        private Properties  parametres;
     
        public void properties() throws FileNotFoundException, IOException{
            parametres = new Properties();
            FileInputStream in = new FileInputStream("jcerbere.properties");
            parametres.load(in);
            in.close();
        }    
     
        public String getParametres(String code){
            //affectation des valeurs par défaut configuré dans le properties
            return parametres.getProperty("parametreOracle.connexion.adresse");        
        }
    Lorsque j'appelle getParameters, j'ai une NullPointerException sur return parametres.getProperty(...); Quelqu'un voit-il pourquoi?

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par Goupo Voir le message
    Quelqu'un voit-il pourquoi?
    ben parametres est null. Tu n'as pas d'exception quand tu fais ton new properties () ?

    soit dit en passant, le nom des classes "doit", par convention, commencer par une Majuscule ...

  3. #3
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Non, pas d'exception pour new properties();

    Citation Envoyé par in Voir le message
    soit dit en passant, le nom des classes "doit", par convention, commencer par une Majuscule ...
    Je sais bien mais je suis pas auteur de cette classe.

  4. #4
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    A propos, voici un court extrait de mon fichier jcerbere.properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bd.outil.outype_traitement = MAJ/C
    bd.profil_utilisateur.pu_date_fin = 01/01/00 
    bd.profil_utilisateur.pudelegation = N

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par Goupo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     return parametres.getProperty("parametreOracle.connexion.adress
    L'extrait ne mentionne nulle part cette propriété.
    Soit l'extrait sert a rien soit tu ne l'a pas definie, donc il est normal que tu ne la trouve pas et donc renvoie "null" en retour de methode getProperty.

  6. #6
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, c'est étrange, il n'y a pas de raison que parametre soit null...du moins à première vue...ce serait plutôt la méthode getParametres qui renvoit null et l'exception se situe après. (parametreOracle.connexion.adresse n'est pas trouvé dans le fichier)
    Essait d'ajouter des traces pour vraiment vérifier (ou utilise un debugger) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public String getParametres(String code){
            String result = null;
            if(parametres == null) {
                System.out.println("parametres null");
            }
            else {
                result = parametres.getProperty("parametreOracle.connexion.adresse");
                if(result == null) 
                    System.out.println("result null");
            }
            return result;        
        }

  7. #7
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Les traces indiquent que parametres est null... !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    parametres null 
    parametres null 
    parametres null
    A propos de mon extrait qui sert à rien voilà la ligne qui concerne la property :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     parametreOracle.connexion.adresse = jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=***)(PROTOCOL=***)(Host=***)(Port=***))(ADDRESS=(COMMUNITY=***)(PROTOCOL=***)(Host=***)(Port=***)))(CONNECT_DATA=(SID=***)))

  8. #8
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Fait voir la portion de code où tu crées ton objet properties ...

    D'ailleurs, il sert à quoi le paramètre "code" de getParametres ? Elle est bizarre cette méthode ...

    sinon, petite question (je ne me souviens plus de la réponse ), t'es sûr que tu peux mettre des espaces avant et après le signe = dans le fichier properties ? [EDIT] oui a priori on peut ...

  9. #9
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Si parametres est null c'est parce que tu dois avoir une exception dans ton constructeur.
    As-tu catché correctement les exceptions? ou tu continue comme si de rien n'était?
    Essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void properties() throws FileNotFoundException, IOException{
            parametres = new Properties();
            FileInputStream in = new FileInputStream("jcerbere.properties");
            parametres.load(in);
            in.close();
            System.out.println("parametres initialisé : " + parametres!=null);
        }
    Si cette trace n'apparaît pas, c'est qu'une exception est levée avant et que tu as mal géré derrière.

  10. #10
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Citation Envoyé par in Voir le message
    Fait voir la portion de code où tu crées ton objet properties ...
    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
    try {  
    String paramAdress = (new properties()).getParametres("parametreOracle.connexion.adresse");
    String paramUser = (new properties()).getParametres("parametreOracle.connexion.utilisateur");
    String paramPass = (new properties()).getParametres("parametreOracle.connexion.passe");
     
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    con = DriverManager.getConnection(paramAdress, paramUser, paramPass);
    ok = true;
    }
    catch (SQLException e) {
    System.out.println("echec d'ouverture:" + e.getMessage());
    ok = false;
    }
    return (ok);
    }
    Citation Envoyé par in Voir le message
    il sert à quoi le paramètre "code" de getParametres?
    En fait j'ai remplacé code par "parametreOracle.connexion.adresse" pour voir si ce n'était pas le paramètre code qui posait problème.

    Citation Envoyé par in Voir le message
    t'es sûr que tu peux mettre des espaces avant et après le signe = dans le fichier properties ?
    Je sais pas, je suis pas auteur de cette classe.

  11. #11
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    En faisant N new Properties tu vas lire et charger N fois ton fichier en mémoire. Garde l'instance en variable et réutilise la.
    Je ne vois pas de catch IOException et FileNotFOundException.

  12. #12
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Citation Envoyé par morph41 Voir le message
    En faisant N new Properties tu vas lire et charger N fois ton fichier en mémoire. Garde l'instance en variable et réutilise la.
    Je ne vois pas de catch IOException et FileNotFOundException.
    Arg, mais quelle horreur ce code.
    J'ai ajouté un bloc try/catch et viré le trhows (je préfère) et j'ai ajouté un champ properties à ma classe DataBase. J'ai aussi mis des majuscules à mes noms de classe.

    Citation Envoyé par Pogo
    Mon code étant désormais normalisé et mon problème toujours d'actualité. Je crois qu'il vaut mieux que je poste un nouveau topic pour que ce soit plus clair pour tout le monde.
    Edit : En fait, ce n'était pas une bonne idée : MultiPost.

    Si quelqu'un voit d'où pourrait venir mon problème, il est donc obligé de me le dire ici. Voilà les classes "Refactorées".

    Méthode appelant la méthode PropertiesCerbere.getParameters().
    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
     
    public boolean ouvre() {
            boolean ok = false;
     
            try {
                String paramAdress = properties.getParametres("parametreOracle.connexion.adresse");
                String paramUser = properties.getParametres("parametreOracle.connexion.utilisateur");
                String paramPass = properties.getParametres("parametreOracle.connexion.passe");
     
                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                con = DriverManager.getConnection(paramAdress, paramUser, paramPass);
                ok = true;
            }
            catch (SQLException e) {
                System.out.println("echec d'ouverture:" + e.getMessage());
                ok = false;
            }
            return (ok);
        }
    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
    public class PropertiesCerbere implements I_properties {
        private Properties  parametres;
     
        public void properties() {
            try {       
                parametres = new Properties();
                FileInputStream in = new FileInputStream("jcerbere.properties");
                parametres.load(in);
                in.close();
            }
            catch (FileNotFoundException fnfe) {
                System.out.println("Le fichier properties est introuvable!");
            }
            catch (IOException ioe) {
                System.out.println("Erreur IO");
            }
        }    
     
        public String getParametres(String code){
            //affectation des valeurs par défaut configuré dans le properties
            //return parametres.getProperty("parametreOracle.connexion.adresse");
            String result = null;
            if(parametres == null) {
                System.out.println("parametres null");
            }
            else {
                result = parametres.getProperty("parametreOracle.connexion.adresse");
                if(result == null) 
                    System.out.println("result null");
            }
            return result;
        }
    }

  13. #13
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    Hello.

    C'est censé être un constructeur, la méthode properties() qui renvoie "void"?

    Habituellement mes constructeurs ne renvoient rien, sinon ils sont (sauf erreur de ma part) considérés comme des méthodes.


  14. #14
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Il est où dans l'arborescence de ton projet ce fichier "jcerbere.properties" ?

  15. #15
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par Glob Voir le message
    C'est censé être un constructeur, la méthode properties() qui renvoie "void"?
    +1, il faut déclarer un constructeur que tu appelles par new.

    Dans ton nouveau code, ton objet n'est pas initialisé quand tu t'en sers.
    Dans ton ancien code, tu appelais le constructeur par défaut, paramètres était donc null. Je suppose que tu croyais appeler ta méthode qui retourne void ... ?

    Enlève le void pour créer un "vrai" constructeur et fait un new pour initialiser tes objets ...

  16. #16
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Je crois effectivement que c'est sensé être un constructeur (si on regarde le 1er post ils ont le même nom).
    Par contre vu que tu as changé le nom de classe, il faut changer le nom du constructeur.

  17. #17
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Euh oui c'est exact, il semble que la "méthode" properties() ne soit jamais appelée. Il faudrait que ça soit le constructeur.

    Voilà une bonne raison d'utiliser les conventions de nommage de Sun pour les classes, à savoir utiliser une Majuscule, ce qui permet de mieux "lire" ce genre de problème.

  18. #18
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    À noter qu'un bon IDE tel qu'Eclipse signale un warning lorsqu'une méthode a un nom de constructeur.

    Eclipse powah

  19. #19
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Ah ouai d'accord...

    À noter qu'un bon IDE tel qu'Eclipse signale un warning lorsqu'une méthode a un nom de constructeur.
    A noter également qu'un bon développeur, et pas forcément si bon que ça, n'aurait pas fait ce genre d'erreur,
    qu'un autre bon développeur, et pas forcément si bon que ça, aurait su voir que PropertiesCerbere n'avait pas de constructeur...

    Ceci-dit merci! Mon problème est résolu, même s'il en cachait un autre mais ça, c'est une autre histoire!

    A la prochaine pour de nouvelles aventures!

  20. #20
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par Goupo Voir le message
    qu'un autre bon développeur, et pas forcément si bon que ça, aurait su voir que PropertiesCerbere n'avait pas de constructeur...
    Un bon développeur ne peut pas non plus deviner ce que tu as fait dans le reste du code.
    Par exemple si tu avais appelé la méthode properties() ailleurs pour initialiser ton objet, il n'y aurait pas eu de problème.
    Personne ne se balade dans ta tête pour trouver le problème. Chaque développeur a "ses propres manies". D'où la difficulté parfois de répondre à des problèmes apparemment simple sur un forum.
    Je vous prierais donc de ne pas dénigrer l'aide qui vous est apportée.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/11/2010, 16h09
  2. tmysqloutput Null PointerException
    Par Elise49 dans le forum Développement de jobs
    Réponses: 17
    Dernier message: 08/05/2009, 22h12
  3. authentification + Null PointerException
    Par pipo7610 dans le forum JSF
    Réponses: 3
    Dernier message: 08/09/2008, 12h26
  4. [hibernate] many-to-one not-null property
    Par chtiboss dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/07/2007, 10h16
  5. error setting property in bean of type null
    Par ouedmouss dans le forum JSF
    Réponses: 8
    Dernier message: 23/01/2007, 12h52

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