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

Langage Java Discussion :

[Débutant] Attribut objet null après instanciation


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 24
    Points : 23
    Points
    23
    Par défaut [Débutant] Attribut objet null après instanciation
    Bonjour,

    J'essaie de faire fonctionner une application J2EE basique en reprenant l'exemple d'un livre.
    J'aiun problème à l'execution, erreur java.NullPointerException.

    Après recherche et plusieurs tests, j'ai identifié la source du problème, par contre je ne le comprends pas, voici le code :

    Servlet est mon controlleur dans lemodèle mvc
    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
     
    public class Servlet extends HttpServlet {
     
    	protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		HttpSession session = request.getSession();
    		AccessBd accessbd = (AccessBd) session.getAttribute("accessbd");
     
    		if(accessbd == null) {
    			System.err.println("accesbd null");
    			accessbd = new AccessBd(request, response);
    			session.setAttribute("accessbd", accessbd);
    		}
    		else {
    			System.err.println("accesbd non null");
    			...
    		}
     
    		String formulaire = request.getParameter("formulaire");
     
    		if(formulaire == null) {
    			if(accessbd == null) {
    				System.err.println("encore accesbd null");
    			}
    			if(accessbd.cnx == null) {
    				System.err.println("avant appel cnx null");
    			}
    			ListePersonne liste = accessbd.getListePersonne(); ---> ligne qui pose problème
    			...
     
    		}
    Elle fait appel à la classe AccessBd qui fait partie du modèle
    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
    ublic class AccessBd {
    	Connection cnx = null;
    	HttpServletRequest request = null;
    	HttpServletResponse response = null;
     
    	public AccessBd(HttpServletRequest request, HttpServletResponse response) {
    		this.request = request;
    		this.response = response;
     
    		try{
    			Class.forName("com.mysql.jdbc.Driver");
    			String url = "jdbc:mysql://localhost/bdtest";
    			cnx = DriverManager.getConnection(url, "root", "active");
    			if (cnx == null) {
    				System.err.println("cnx null instanciation");
    			}
    		}
    		catch(ClassNotFoundException e) {
    			displayException(e);
    		}
    		catch(SQLException e) {
    			displayException(e);
    		}
    	}
     
    	public ListePersonne getListePersonne() {
    		try {
    		if(cnx != null)
    			System.err.println("cnx non null");
    		else 
    			System.err.println("cnx null");
     
    			Statement st = cnx.createStatement();
    			ResultSet rs = st.executeQuery("SELECT * FROM personne");
     
    			ListePersonne listePersonne = new ListePersonne();
     
    			while(rs.next()) {
    				...
    			}
     
    			st.close();
    			rs.close();
     
    			return listePersonne;
    		}
    		catch (SQLException e) {
    			displayException(e);
    		}
    		return null;
     
    	}
    à l'execution dans laconsole :
    accesbd null
    avant appel cnx null
    cnx null

    Donc l'instanciation de AccessBd semble être fonctionnelle, j'obtiens bien une connection vers mon SGBD mais, pourtant lors de l'appel de la fonction getListpersonne, ma connection semble être nulle.

    Je ne comprends pas trop pourquoi,
    Désolé pour le long post

  2. #2
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    et la classe HttpSession elle contient quoi?
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  3. #3
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(cnx != null)
             System.err.println("cnx non null");
          else
             System.err.println("cnx null");
     
             Statement st = cnx.createStatement();
    Etrange si cnx est null tu appelles createStatement() dessus donc c'est pas etonnant si tu as un nullPointerException !!!
    Pour bien identifier ton probleme, fais des tests de nullité au debut de tes methodes mais aussi a la fin quand tu initialise les objets qui sont null
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

  4. #4
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    Citation Envoyé par Scorpyosis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(cnx != null)
             System.err.println("cnx non null");
          else
             System.err.println("cnx null");
     
             Statement st = cnx.createStatement();
    Etrange si cnx est null tu appelles createStatement() dessus donc c'est pas etonnant si tu as un nullPointerException !!!
    Pour bien identifier ton probleme, fais des tests de nullité au debut de tes methodes mais aussi a la fin quand tu initialise les objets qui sont null
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Statement st = cnx.createStatement();
    n'est pas a la portee du else!!!
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

  5. #5
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Autant pour moi j'avais pas vu qu'il n'y avais pas de { }, cependant vu que l'instruction et après le IF et le ELSE si cnx est null il est normal qu'il y ait un nullPointerException !!!!
    Les deux principales inventions sorties de Berkeley sont UNIX et le LSD. Difficile de croire à une quelconque coïncidence - Jeremy S. Anderson

    Avant de vouloir qu’un logiciel soit réutilisable, il faudrait d’abord qu’il ait été utilisable - Ralph Johnson

Discussions similaires

  1. List reste null après instanciation
    Par mac&cheese dans le forum C#
    Réponses: 5
    Dernier message: 23/01/2011, 19h11
  2. Attribution de variable après un pipe
    Par LFC dans le forum Linux
    Réponses: 4
    Dernier message: 28/12/2005, 22h46
  3. [Language]Type d'un objet null
    Par Calambo dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2005, 10h06
  4. Formulaire - lien JS - objet Null ou pas objet...
    Par Romalafrite dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/10/2004, 14h08
  5. [Débutant] Quel objet dialogue choisir ???
    Par Walm dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/01/2004, 14h40

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