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 :

NullPointerException dans ma Dao


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Par défaut NullPointerException dans ma Dao
    Bonjour,

    je viens vers vous car mon code lève une exception et malgré mes recherches, je ne trouves pas la solution.

    Voilà, j'ai un pop up qui doit faire appelle à ma classe Dao pour obtenir une liste d'objet à mettre dans une JList.

    Voici le code de mon pop-up
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    package be.retrocollection.popup.www;
     
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.*;
     
    import be.retrocollection.connexion.www.Connect;
    import be.retrocollection.dao.www.*;
    import be.retrocollection.pojo.www.*;
     
    public class EditeurDialog extends JDialog implements ActionListener{
    	private Container content;
    	private JPanel panel;
    	private GridBagLayout gbLayout;
    	private GridBagConstraints gbConstraint;
    	private JLabel labelPays,labelImage,labelNom,icone;
    	private JTextField txtImage,txtNom;
    	private JButton btnValider,btnAnnuler,btnAjouterImage;
    	private PojoEditeur pojoEditeur;
    	private JComboBox cmbListePays;
    	private JList editeurList;
    	private DefaultListModel editeurListModel;
     
     
    	public EditeurDialog(JFrame parent, String title, boolean modal) {
    		super(parent, title, modal);
    		pojoEditeur = new PojoEditeur();
    		init();
    	}
     
    	public EditeurDialog(JFrame parent, String title, boolean modal,PojoEditeur pojo) {
    		super(parent, title, modal);
    		pojoEditeur = pojo;
    		init();
    	}
     
    	private void init() {
    		content = getContentPane();
    		panel = new JPanel();
    		gbLayout = new GridBagLayout();
    		gbConstraint = new GridBagConstraints();
    		panel.setLayout(gbLayout);
    		labelNom = new JLabel("Nom : ");
    		labelPays= new JLabel("Pays : ");
    		labelImage= new JLabel("Logo : ");
    		cmbListePays = new JComboBox();
    		txtNom = new JTextField(15);
    		txtImage = new JTextField(15);
    		btnValider = new JButton("Insérer");
    		btnAnnuler = new JButton("Annuler");
    		btnAjouterImage = new JButton("...");
    		btnValider.addActionListener(this);
    		btnAnnuler.addActionListener(this);
    		createJList();
     
    		ajouterComposant(editeurList, 0, 0, 1, 5);
    		ajouterComposant(labelNom, 0, 1, 2, 1);
    		ajouterComposant(txtNom, 0, 4, 7, 1);
    		ajouterComposant(labelPays, 1, 1, 2, 1);
    		ajouterComposant(cmbListePays, 1, 4, 6, 1);
    		ajouterComposant(labelImage, 2, 1, 2, 1);
    		ajouterComposant(txtImage, 2, 4, 6, 1);
    		ajouterComposant(btnAjouterImage, 2, 11, 1, 1);
    		ajouterComposant(btnValider, 4, 4, 1, 1);
    		ajouterComposant(btnAnnuler, 4, 5, 1, 1);
    		content.add(panel);
    		this.setSize(400,200);
    		this.setLocationRelativeTo(null);
    		this.setResizable(false);
    		this.setVisible(true);
    	}
     
       private void ajouterComposant(Component composant, int ligne, int colonne, int largeur, int hauteur) {
     
    	   gbConstraint.gridx = colonne;
    	   gbConstraint.gridy = ligne;
     
    	   gbConstraint.gridwidth = largeur;
    	   gbConstraint.gridheight = hauteur;
     
    	   gbConstraint.insets = new Insets( 3, 3, 3, 3);
     
           gbLayout.setConstraints(composant, gbConstraint);
           panel.add(composant, gbConstraint);
     
     
        }
     
       private void createJList() {
    	   AbstractDao<PojoEditeur> editeurDao = new EditeurDao(Connect.getInstance());
    	   editeurListModel = new DefaultListModel();
    	   List<PojoEditeur> listEditeur = new ArrayList<PojoEditeur>();
    	   listEditeur = editeurDao.selectAll();
    	   for(PojoEditeur editeur : listEditeur) {
    		   editeurListModel.addElement(editeur.getNom());
    	   }
    	   editeurList = new JList(editeurListModel);
       }
     
    @Override
    public void actionPerformed(ActionEvent e) {
    	if(e.getSource() == btnAnnuler) {
    		setVisible(false);
    	}
     
    }
    }

    voici ma classe DAO

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    package be.retrocollection.dao.www;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
     
    import be.retrocollection.connexion.www.Connect;
    import be.retrocollection.pojo.www.PojoEditeur;
     
    public class EditeurDao extends AbstractDao<PojoEditeur> {
     
    	public EditeurDao(Connection connection) {
    		super(connection);
    	}
     
    	@Override
    	public boolean insertUpdate(PojoEditeur obj) {
    		try {
    			if(obj.getId() == 0) {
    				String requete = prop.getProperty("editeur.create()");
    				PreparedStatement prepare = connect.prepareStatement(requete);
    				// Bind des paramètres
    				prepare.setString(1, obj.getNom());
    				prepare.executeUpdate();
    				prepare.close();
    			}
    			else {
    				String requete = prop.getProperty("editeur.update()");
    				PreparedStatement prepare = Connect.getInstance().prepareStatement(requete);
     
    				prepare.setString(2, obj.getNom());
    				prepare.setInt(4, obj.getId());
    				prepare.executeUpdate();
    				prepare.close();
    			}
    			return true;
    		}	
    		catch (SQLException e) {
    			e.printStackTrace();
    			return false;
    		}
    	}
     
    	@Override
    	public boolean delete(PojoEditeur obj) {
    	String requete = prop.getProperty("editeur.delete()");
    		try {	
    			PreparedStatement prepare = Connect.getInstance().prepareStatement(requete);
     
    			prepare.setInt(1, obj.getId());
     
    			prepare.executeUpdate();
     
    			prepare.close();
    			return true;			
    		}
    		catch (SQLException e){
    			e.printStackTrace();
    			return false;
    		}
    	}
     
    	@Override
    	public PojoEditeur find(int id) {
    		PojoEditeur editeur = null;
    		String requete = prop.getProperty("editeur.find()");
     
    		try {
    			PreparedStatement prepare = Connect.getInstance().prepareStatement(requete);
    			prepare.setInt(1, id);
    			ResultSet resultat = prepare.executeQuery();
    			while(resultat.next()) {
    				// Création du PojoClient
    				editeur = new PojoEditeur(resultat.getInt("id"),resultat.getString("nom"));
    			}
    			prepare.close();
    			resultat.close();
    		}
    		catch(SQLException e) {
    			e.printStackTrace();
    		}
    		return editeur;
    	}
     
     
    	@Override
    	public List<PojoEditeur> selectAll() {
    		String requete = prop.getProperty("editeur.selectAll()");
    		List<PojoEditeur> listeEditeur = new ArrayList<PojoEditeur>();
    		PreparedStatement prepare;
    		try {
    			prepare = connect.prepareStatement(requete);
    			ResultSet resultat = prepare.executeQuery();
     
    			while(resultat.next()) {
    				listeEditeur.add(new PojoEditeur(resultat.getInt("id"),
    						resultat.getString("nom")));
    				}
    			prepare.close();
    		}
    		catch (SQLException e){
    			e.getSQLState();
    		}
    		return listeEditeur;
    	}
     
    }
    et voici la classe mère de ma classe Dao (afin d'être complet)

    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 be.retrocollection.dao.www;
    import java.io.*;
    import java.sql.*;
    import java.util.*;
     
    /**
     * Classe abstraite de DAO permettant l'héritage
     * Cette classe aide à l'implémentation du Design Pattern DAO
     * @author Yohan
     *
     * @param <T> Paramètre représentant le pojo que la classe doit traiter
     */
    public abstract class AbstractDao<T> implements IDao {
    	/**
             * Attribut de connexion à la base de donnée
             */
    	protected Connection connect = null;
     
    	/**
             * Fichier properties
             */
    	protected Properties prop;
     
    	/**
             * Constructeur par défaut
             * @param connection Attributs de connexion à la base de données
             */
    	public AbstractDao(Connection connection) {
    		this.connect = connection;
    		initProperties();
    	}
     
    	/**
             * Méthode d'initialisation du fichier de propriétés
             */
    	public void initProperties() {
    		prop = new Properties();
    		FileInputStream in;
    		try {
    			in = new FileInputStream("src/requete.properties");
    			prop.load(in);
    			in.close(); 
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    	/**
             * Méthode permettant d'insérer ou d'updater un objet T
             * @param obj Pojo a inserer
             * @return true ou false en fonction de la reussite / eche de l'insertion
             */
    	public abstract boolean insertUpdate (T obj);
     
    	/**
             * Méthode permettant de supprimer un objet T
             * @param obj Pojo a supprimer
             * @return true ou false en fonction de la reussite / eche de la suppression
             */
    	public abstract boolean delete (T obj);
     
    	/**
             * Méthode permettant d'updater un objet T
             * @param obj Pojo a updater
             * @return true ou false en fonction de la reussite / eche de l'update
             */
    	public abstract T find(int id);
     
    	/**
             * Méthode permettant de trouver le dernier Id présent dans la BDD
             */
     
    	public abstract List<T> selectAll();
    }
    Quand je run mon code, tout marche bien jusque l'affichage du pop up ou il met met l'exception suivante:

    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
     
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at be.retrocollection.dao.www.EditeurDao.selectAll(EditeurDao.java:95)
    	at be.retrocollection.popup.www.EditeurDialog.createJList(EditeurDialog.java:96)
    	at be.retrocollection.popup.www.EditeurDialog.init(EditeurDialog.java:57)
    	at be.retrocollection.popup.www.EditeurDialog.<init>(EditeurDialog.java:31)
    	at be.retrocollection.gui.www.BarreMenu.actionPerformed(BarreMenu.java:137)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.AbstractButton.doClick(Unknown Source)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    La ligne 95 correspond à l'appelle prepare = Connect.PrepareStatement(requete);

    Je ne sais pas trop par ou chercher, ma requete SQL est bien chargé du fichier (quand je fais un system.out.println, il l'affiche correctement).

    Ce code est un copié-collé d'une autre application fait par un ami et chez lui celà fonctionne, et ilme semble que je n'ai pas fait d'erreur ni d'omission dans mon copié-collé

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AbstractDao<PojoEditeur> editeurDao = new EditeurDao(Connect.getInstance());
    Quel est le contenu de la methode Connect.getInstance() ?
    A première vu je dirais que cette methode retourne null !

    Et donc passe null a EditeurDao et provoque un nullPointer sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prepare = connect.prepareStatement(requete);
    Car "connect" est null !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Par défaut
    Mouarf, effectivement l'appel à mon singleton de connection ne se faisait pas correctement.
    Ca marche maintenant...

    Désolé pour cette question un peu débutante, si j'avais utilisé le débuggeur j'aurais sans doute vu cette erreur grosse comme une maison.

    Merci encore de votre réponse rapide et précise

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

Discussions similaires

  1. [Integration] EJB pas injecté dans mon DAO
    Par evilnet dans le forum Spring
    Réponses: 2
    Dernier message: 19/04/2010, 18h14
  2. ClassCastException dans un DAO générique
    Par lion13 dans le forum Hibernate
    Réponses: 1
    Dernier message: 29/07/2009, 15h41
  3. NullPointerException dans l'execution
    Par jawed84 dans le forum Struts 1
    Réponses: 11
    Dernier message: 02/01/2008, 08h41
  4. Réponses: 8
    Dernier message: 29/10/2007, 17h52
  5. NullPointerException dans JBuilder
    Par baya1 dans le forum JBuilder
    Réponses: 2
    Dernier message: 19/04/2007, 19h53

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