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 :

Problème java.lang.NullPointerException sur ArrayList


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut Problème java.lang.NullPointerException sur ArrayList
    Bonjour,
    J'ai ce modèle :
    Classe Livre étends Classe Article étends Classe Personne avec pour la Classe Personne : (je ne mets ici que les méthodes que j'utilise pour le problème avec des précisions en gras et italique sur les points importants )
    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
     public class Personne  
     { 
         private String nom; 
         private String prenom; 
         private LocalDate date_nais; 
         private ArrayList<Article> oeuvresList; Ici list des oeuvres d'une personne 
          
             public Personne() 
         { 
             super(); 
             oeuvresList=new ArrayList<> ();
         } 
     public ArrayList<Article> getoeuvresList()  
         { 
           return oeuvresList; 
         }
    pour la Classe Article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Article extends Personne 
     { 
         private int reference; 
         private String designation; 
         private double prix;
    Pour la Classe Livre :
    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
    public class Livre extends Article 
     { 
         private String isbn; 
         private int nbPages; 
         private Personne auteur; 
     public Livre(int reference,String designation,double 
        		 prix,String isbn,int nbPages,Personne auteur) 
        		          {   
        		              super(reference,designation,prix); 
        		              setIsbn(isbn); 
        		              setNbPages(nbPages); 
        		              setAuteur(auteur);
        		          } 
     public void setAuteur(Personne auteur) { 
            	              this.auteur = auteur; 
            	             ArrayList<ArticleC> lst; 
            	             lst=auteur.getoeuvresList();
            	            if (!lst.contains(this))                    ici est le pb lst=null
            	            { 
            	                  lst.add(this); 
            	             } 
            	        }
    j'ai rajouté après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArticleC> lst;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lst=new ArrayList<> ();
    Mais ca n'a pas résolu le pb

    Niveau exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Livre l1;
     l1=new Livre();
            l1.setReference(123);
            l1.setDesignation("Le Pigeon");
            l1.setPrix(20.54);
            l1.setIsbn("1245879215");
            l1.setNbPages(254);
            l1.setAuteur(new Personne("Zone","Eric",LocalDate.of(1978,05,12)));   'Ici le pb 
    J'ai l'erreur "Exception in thread "main" java.lang.NullPointerException" si quelqu'un a une idée Merci

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    plusieurs choses:
    - d'abord une remarque: pourquoi Article étends Personne? C'est plus qu'étrange
    - ensuite on n'a pas tous les codes entre les constructeurs sans paramètres (d'ailleurs pourquoi en avoir?) et ceux qui en ont ... on n'a pas les codes...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut Réponse à professeur shadoko (J'ai trouvé la solution)
    - d'abord une remarque: pourquoi Article étends Personne? C'est plus qu'étrange
    Bonjour et merci pour ta réponse, en effet c'est une erreur de ma part, je pensais que puisque Livre utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class LivreC3 extends ArticleC 
     { 
         private String isbn; 
         private int nbPages; 
         private Personne auteur;
    et que Livre étends Article je pensais qu'il fallait que Article étende Personne pour que Livre puisse "utiliser"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ]private Personne auteur;
    ben en effet non puisque je l'ai enlevé et pas d'erreur de compilation, il suffit que la classe soit dans le même dossier.
    - ensuite on n'a pas tous les codes entre les constructeurs sans paramètres (d'ailleurs pourquoi en avoir?) et ceux qui en ont ... on n'a pas les codes...
    Te voici les codes en entier des classes : (ne t'étonne pas si les noms des classes finissent pas C ou C3

    Classe Personne
    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
    75
    76
    77
    78
     
    package Cours.Exos.ExosCorrection;
     
    import java.time.LocalDate;
    import java.util.ArrayList; 
     
     public class PersonneC  
     { 
         private String nom; 
         private String prenom; 
         private LocalDate date_nais; 
         private ArrayList<ArticleC> oeuvresList;
     
             public PersonneC() 
         { 
             super(); 
             oeuvresList=new ArrayList<> ();
         } 
     
         public PersonneC(String n,String p,LocalDate d) 
         { 
             this.nom=n; 
             this.prenom=p; 
             this.date_nais=d; 
         } 
     
         public PersonneC(String n,String p,LocalDate d,int ref,String des) 
         { 
             this.nom=n; 
             this.prenom=p; 
             this.date_nais=d;
             ArticleC oeuvre;
             oeuvre=new ArticleC();
             oeuvre.setReference(ref); 
             oeuvre.setDesignation(des); 
             oeuvresList=new ArrayList<>();
             oeuvresList.add(oeuvre);
         } 
     
         public ArrayList<ArticleC> getoeuvresList()  
         { 
           return oeuvresList; 
         } 
     
         public String getNom()  
         { 
           return nom; 
         } 
     
         public void setNom(String nom)  
         { 
            this.nom = nom; 
         }  
     
         public String getPrenom()  
         { 
           return prenom; 
         } 
         public void setPrenom(String prenom)  
              { 
               this.prenom = prenom; 
              } 
     
              public LocalDate getDate_nais()  
             { 
                return date_nais; 
              } 
     
              public void setDate_nais(LocalDate date_nais)  
              { 
                this.date_nais = date_nais; 
              } 
     
             public String toString() { 
                  return prenom  + " Classe PersonneC  " + nom + " " + date_nais; 
              } 
     
          }
    Classe Article
    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
     
    public class ArticleC  
     { 
         private int reference; 
         private String designation; 
         private double prix; 
     
         public ArticleC() 
             { 
                 super(); 
             } 
     
             public ArticleC(int reference) 
             { 
                 this(); 
                 setReference(reference); 
             } 
             public ArticleC(int reference,String designation) 
             { 
                 this(reference); 
                 setDesignation(designation); 
             } 
     
              public ArticleC(int reference,String designation, 
    double prix) 
              { 
                 this(reference,designation); 
                 setPrix(prix); 
             } 
     
             public int getReference()  
             { 
                 return reference; 
             } 
             public void setReference(int reference)  
                      { 
                          this.reference = reference; 
                      } 
     
                      public String getDesignation()  
                      { 
                          return designation; 
                      } 
     
                      public void setDesignation(String designation)  
                      { 
                          this.designation = designation; 
                      } 
     
                      public double getPrix() 
                      { 
                          return prix; 
                      } 
     
                      public void setPrix(double prix)  
                      { 
                          this.prix = prix; 
                      } 
     
                      public String toString() 
                      { 
                          return "Référence : "+ getReference() + " Désignation : " + getDesignation() + 
             " Prix : " + getPrix() + " €"; 
                      } 
     
                      }
    Classe Livre ou était le problème je t'ai mis en gras un commentaire sur la ligne ou arrivait le pb
    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
    75
    76
    77
    78
    79
    80
    81
    82
    import java.time.LocalDate;
    import java.util.ArrayList;
    
    public class LivreC3 extends ArticleC 
     { 
         private String isbn; 
         private int nbPages; 
         private PersonneC auteur; 
          
         public LivreC3() 
             { 
                 super(); 
             } 
         public LivreC3(int reference,String designation,double 
    prix,String isbn,int nbPages) 
             { 
                 super(reference,designation,prix); 
                 setIsbn(isbn); 
                 setNbPages(nbPages); 
             } 
         //Constructeur à ne plus utiliser ne gère pas la liste des oeuvres et utilise variable de classe dans fonction
         public LivreC3(int reference,String designation,double 
        		 prix,String isbn,int nbPages,String nom,String prenom,LocalDate dnaiss) 
        		          {   
        		              super(reference,designation,prix); 
        		              setIsbn(isbn); 
        		              setNbPages(nbPages); 
        		              auteur=new PersonneC();
        		              auteur.setNom(nom);
        		              auteur.setPrenom(prenom);
        		              auteur.setDate_nais(dnaiss);
        		          } 
        
          public LivreC3(int reference,String designation,double 
        		 prix,String isbn,int nbPages,PersonneC auteur) 
        		          {   
        		              super(reference,designation,prix); 
        		              setIsbn(isbn); 
        		              setNbPages(nbPages); 
        		              setAuteur(auteur);
        		          } 
             public String getIsbn() { 
                 return isbn;          } 
      
             public void setIsbn(String isbn) { 
                 this.isbn = isbn; 
             } 
      
             public int getNbPages() { 
                 return nbPages; 
             } 
             public void setNbPages(int nbPages) { 
            	              this.nbPages = nbPages; 
            	          } 
            	   
             public PersonneC getAuteur() { 
            	             return auteur; 
            	          } 
            	   
         /*   public void setAuteur(PersonneC auteur) { 
            	              this.auteur = auteur; 
            	          } */
             public void setAuteur(PersonneC auteur) { 
            	              this.auteur = auteur; 
            	             ArrayList<ArticleC> lst;   
            	             lst=new ArrayList<> ();
            	             lst=auteur.getoeuvresList();
            	            if (!lst.contains(this))     le pb était ici lst=null
            	            { 
            	                lst.add(this); 
            	             } 
            	        } 
            
            public String toString() 
            	          {       	            
            	              return super.toString() +
            	               " Nbre Pages : "	  + getNbPages() +
            	              " Auteur : " + getAuteur(); 	                
            	          } 
            	       
            	   }
    L'exécution :J'ai modifié et j'ai utilisé l'autre constructeur de la classe Personne et maintenant ça marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    LivreC3 l,l1;
     l1=new LivreC3();
            l1.setReference(123);
            l1.setDesignation("Le Pigeon");
            l1.setPrix(20.54);
            l1.setIsbn("1245879215");
            l1.setNbPages(254);
            l1.setAuteur(new PersonneC("Zone","Eric",LocalDate.of(1978,05,12))); c'est ici que la classe est instanciée et pose problème la ArrayList de type Article  vaut null          
    J'ai modifié et j'ai utilisé l'autre constructeur de la classe Personne et maintenant ça marche
                  l1.setAuteur(p=new PersonneC("Zone1","Eric1",LocalDate.of(1980, 12,11),l1.getReference(),l1.getDesignation()));
    MErci, si t'as des sugestions je suis preneur
    A+

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

Discussions similaires

  1. java.lang.NullPointerException sur calcul dans TMap
    Par TheTcha dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 31/01/2013, 10h57
  2. Problème java.lang.NullPointerException
    Par ThE BiShOp* dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 29/05/2012, 09h51
  3. [Eclipse 3.2.2] Problème java.lang.NullPointerException
    Par richard_sraing dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/03/2011, 16h51
  4. java lang NullPointerException sur ue boucle for
    Par youness78 dans le forum Langage
    Réponses: 9
    Dernier message: 23/11/2009, 16h18
  5. Problème "java.lang.NullPointerException"
    Par driz764 dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 22/10/2008, 18h33

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