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 de débutant, java.lang.NullPointerException


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Erreur de débutant, java.lang.NullPointerException
    Bonjour,

    Je suis débutant et j'ai effectué un programme récupérant plusieurs données (image et capteurs) comprenant une création automatique d'un fichier xml réunissant toutes les données acquise. Et c'est là ou je bloque car je n'ai pas totalement compris la notion d'initialisation des classe d'où mon erreur"java.lang.NullPointerException"

    Explication des 2 classes:

    J'ai une classe IHM qui comme son nom l'indique réunie tout l'interface dont la visualisation des données vidéos et capteur plus l'interface permettant de capturé ces données dans des onglets. C'est là ou intervient la classe qui me pose problème. C'est ma classe OngletCompenent qui crée de nouveaux onglet sur mon interface à chaque nouveaux appuies sur un bouton et qui récupère les infos liées aux capteurs et à ma vidéo.
    Donc le principe pour la création de mon fichier xml c'est de créer la base sur mon IHM puis d'y ajouter une nouvelle partie de XML à chaque validation d'onglet.
    Là ou je coince c'est pour passer mon Element Racine depuis IHM à OngletCompenent.


    Voici ma classe principale IHM qui gère l'initialisation de mon fichier XML (je vous mes que le code concernant la génération de mon xml):
    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
    public IHM() { ....
     
         //**** X M L *****/
        //création de la racine principale
         Element Base = new Element("Racine");
        //création de nouveau document JDOM basé sur la racine 
         org.jdom2.Document doc = new Document(Base);
         getdocument(doc);
         getracine(Base);
            //*** X M L ******/
     
    //***XML****//
     
     
    public void getracine(Element racine)
    {
        this.racine = racine;
    }
    ....
     
    }

    Et voici ma seconde classe OngletCompenent (je vous mes pas tout le doe pour la lisibilité):
    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
     
    public Element racine; //Base de mon XML
    public int o = 0; //num Onglets
    .....
    public final class OngletCompenent extends javax.swing.JPanel {
    ....
    Element racine; 
    IHM element; 
    ....
     
     private void ValidationOngletMouseClicked(java.awt.event.MouseEvent evt) {                                              
           racine = element.racine;
           o = element.o;
           ValidationOnglet.setBackground(Color.GREEN);
           ValidationOnglet.setText("Onglet validé");   
     
             sdate = Date.getText();
            slieu = Lieu.getText();
            sheure = Heure.getText();
            scapteur = textCapteur.getText();
            scommentaire = textremarque.getText();
            simage = (fichier.getAbsolutePath()+"_"+o+".jpg");
            sOnglet = "onglet_"+o;
            sNum = Integer.toString(o);
          //Créaqtion d'un nouvel élément Onglet
                //en tant qu'Element de racine
                 Element onglet = new Element(sOnglet);
                 racine.addContent(onglet);
     
                 //cration d'un nouveau attribut de classe que j'ajoute à onglet
                 Attribute numero = new Attribute("neméro",sNum);
                 onglet.setAttribute(numero);
     
                  //On crée un nouvel Element lieu
                Element lieu = new Element("Lieu");
                lieu.setText(slieu);
                onglet.addContent(lieu);
     
                //On crée un nouvel Element date
                Element date = new Element("date");
                date.setText(sdate);
                onglet.addContent(date);
     
                //On crée un nouvel Element heure
                Element heure = new Element("heure");
                heure.setText(sheure);
                onglet.addContent(heure);
     
                //On crée un nouvel Element commentaire
                Element commentaire = new Element("commentaire");
                commentaire.setText(scommentaire);
                onglet.addContent(commentaire);
     
                Element image= new Element("image");
                image.setText(simage);
                onglet.addContent(image);
     
     
        }             
     
    }
    Donc mon programme plante à la ligne racine = element.racine;.

    Voila j’espère que j'ai su resté clair dans mes explications.

    Je vous remercie d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    C'est simple, en regardant ton code on voit :

    (donc element est null).

    puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     private void ValidationOngletMouseClicked(java.awt.event.MouseEvent evt) {                                              
    racine = element.racine;
    Element étant null alors tu as un nullpointerexception, donc il faut pas oublier d'instancier element.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Bonjour

    A quel moment créé tu ton objet OngletCompenent?
    as tu redéfini le constructeur de cette classe.

    l'instance IHM element de OngletCompenent ne semble pas être initialisée, peut être devrait tu le faire dans ton constructeur.

    Si tu créer cet ton OngletCompenent depuis ta classe IHM, tu peut passer ton instance d'IHM via le constructeur d'OngletCompenent.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    wax79:
    Merci pour ta réponses mais je fais comment dans ce cas pour que element ne soit plus null mais pour qu'il corresponde bien à mon IHM?

    ElSposo:

    Je crée effectivement tous mes OngletCompenent depuis IHM.

    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
     
    public IHM() { .....
     
        private void CaptureActionPerformed(java.awt.event.ActionEvent evt) {                                        
     
            OngletCompenent onglet = new OngletCompenent();
            onglet.getscreenshot().setIcon(recorder.getLabelImg().getIcon());
            //Fonction permettant d'ajouté le onglet à un Jtabbed
            Screen.addTab("Capture_"+(o++), onglet);
            //CHOIX de FICHIER
            if (saveOK  == false){ 
            saveOK = true;
             JFileChooser fileChooser = new JFileChooser();
            if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
     
                file = fileChooser.getSelectedFile();
            }
             } 
                onglet.gettextCapteur().append(Stringcapteurselection+"\n"+Stringcapteur);
               recorder.setCapture(file.getAbsolutePath()+"_"+o+".jpg"); //envoie à la fonction setCapature de Recorder le nom entier + .jpg pour l'extension  file.getName()
               onglet.getPathImage(file.getAbsolutePath()+"_"+o+".jpg");
     
        }   
    .....
    }
    Je dois m'y prendre comment pour passer mon instance IHM via le constructeur de OngletCompent ?

  5. #5
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    ajoute un constructeur dans OngletCompenent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public OngletCompenent(IHM monIHM){
       super();
       this.element = monIHM;
    }
    et appele le lors de la construction dans IHM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OngletCompenent onglet = new OngletCompenent(this);
    "this" représente l'instance de l'objet dans lequel tu te trouve, donc dans ton cas, l'instance d'IHM.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci je n'aurais pas pensé à utiliser cette méthode.
    Mais maintenant j'ai à nouveau l’exception qui est levé dans IHM sur la ligne juste après la création d'un nouveau OngletCompenent.

    onglet.getscreenshot().setIcon(recorder.getLabelImg().getIcon());

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Avais tu déjà un constructeur de défini dans OngletCompenent? Il semble que tu ais un certain nombre d'éléments à initialiser.

    Si tu as déjà un constructeur "OngletCompenent()" de défini, il faut que tu recopies son contenu a la suite du constructeur OngletCompenent(IHM monIHM)

    Sinon, il faudrait nous montrer le code des fonctions qui posent problème, notamment la méthode getscreenshot() et les variables associées.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    C'est bon je te remercie beaucoup pour l'aide que tu m'as apporté, mon programme fonctionne nickel et pour info effectivement j'avais loupé un constructeur.

    J'ai juste 2 petites questions pour toi, comment tu as fais pour savoir que j'avais oublié un constructeur lors de ma modification. Et à quoi ça sert de rajouté super(); ?

  9. #9
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Eh bien vu ton code, la deuxième erreur que tu as signalée semblait se produire avant que le code ou tu avais rencontré ta premiére erreur ne soit exécutée.

    La modification que je t'ai fais faire avait donc probablement causé cette erreur, et la cause la plus plausible était que ton ancien constructeur contenait du code qu'il fallait reporter sur le nouveau.

    Quand à super(), cela appelle le constructeur de la classe dont tu hérite, ça permet de s'assurer que ton composant sera correctement initialisé.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2011, 19h37
  2. Erreur "save failed: java.lang.NullPointerException"
    Par faffany dans le forum Struts 2
    Réponses: 8
    Dernier message: 15/09/2011, 11h42
  3. erreurs de type java.lang.NullPointerException
    Par laposte dans le forum Servlets/JSP
    Réponses: 17
    Dernier message: 06/04/2009, 19h45
  4. Erreur impossible à résoudre : java.lang.NullPointerException
    Par loader dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 11/06/2008, 19h50
  5. [Débutant] Erreur java.lang.NullPointerException
    Par Kevin12 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/02/2007, 15h48

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