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

Développement Web en Java Discussion :

problème applet erreur java.lang.NullPointerException


Sujet :

Développement Web en Java

  1. #1
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut problème applet erreur java.lang.NullPointerException
    Bonjour à tous je suis un grand débutant, j'ai une applet a faire dans le thème d'un cour car étant étudiant, j'ai donc une applet qui doit chercher un nom dans ma base de donnée avec wampserver, quand je lance l'applet cela me m'est une erreur java.lang.NullPointerException je ne comprends pas voici le code de l'applet:

    Code java : 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
    package client;
     
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Vector;
     
    import javax.swing.JApplet;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JTextField;
    import javax.swing.SwingConstants;
     
    import SResultSet.SerializedResultSet;
     
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    public class AppletRecherche extends JApplet {
    	private JTextField txtAaa;
    	private JList listeResultat;
    	/**
             * Create the applet.
             */
    	public AppletRecherche() {
    		getContentPane().setLayout(null);
     
    		JLabel lblNewLabel = new JLabel("Nom de la personne rechercher");
    		lblNewLabel.addKeyListener(new KeyAdapter() {
    			public void keyPressed(KeyEvent arg0) {
    			}
    		});
    		lblNewLabel.setBounds(0, 3, 225, 300);
    		lblNewLabel.setVerticalAlignment(SwingConstants.TOP);
    		getContentPane().add(lblNewLabel);
     
    		txtAaa = new JTextField();
    		txtAaa.setBounds(225, 0, 225, 20);
    		getContentPane().add(txtAaa);
    		txtAaa.setColumns(10);
    		JButton button = new JButton("Rechercher");
    		button.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				Rechercher();
     
    			}
    		});
    		button.setBounds(120, 31, 116, 29);
    		getContentPane().add(button);
     
    		JList listeResultat = new JList();
    		listeResultat.setBounds(0, 85, 450, 215);
    		getContentPane().add(listeResultat);
     
    	}
     
    	private void Rechercher() {
     
    		String res;
    		String nom=txtAaa.getText();
    		try
    		{	
    			// Connexion à la servlet
    			URL url=new URL("http://localhost:8080/ProjetServlet/requete");
    			URLConnection connexion=url.openConnection();
    			connexion.setDoOutput(true);
    			// Récupération du flux de sortie
    			ObjectOutputStream fluxsortie = new ObjectOutputStream(connexion.getOutputStream());
    			// Envoi du nom à rechercher
    			fluxsortie.writeObject(nom);
    			// Récupération du flux d’entrée
    			ObjectInputStream fluxentree = new ObjectInputStream(connexion.getInputStream());
    			// Récupération du résultat de la requête
    			SerializedResultSet donnees=(SerializedResultSet) fluxentree.readObject();
    			// affichage du résultat
    			donnees.first();
    			Vector contenu=new Vector();
    			contenu.clear();
    			listeResultat.setListData(contenu); // erreur d'après le débogueur
    			for (int i=0; i<donnees.recordCount();i++)
    			{
    				res=donnees.getString("nom")+" "+donnees.getString("prenom");
    				contenu.addElement(res);
    				donnees.next();
    			}
    			if (donnees.recordCount()==0) 
    				{
    				res="Pas de personne correspondante";
    				contenu.addElement(res);
    				}
    			listeResultat.setListData(contenu);	
     
    		}
    		catch (Exception sql)
    		{
    			System.out.println("erreur "+sql);
    		}
     
    	} 
    }

    voici celui de ma servlet:

    Code java : 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
    package MesServlets;
     
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.sql.DataSource;
     
    import SResultSet.SerializedResultSet;
     
    public class ServletRequete extends HttpServlet {
    	private DataSource ds;
    	Connection BD;
    	String nomPersonne;
    	SerializedResultSet sresultat;
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    											throws ServletException, IOException {
    		try {
    			// Récupération du flux d'entrée envoyé par l'applet
    			ObjectInputStream entree=new ObjectInputStream(request.getInputStream());
    			nomPersonne=(String)entree.readObject();
    			// Préparation du flux de sortie
    			ObjectOutputStream sortie=new ObjectOutputStream(response.getOutputStream());
    			// Execution de la requête
    			sresultat=ExecuterRequete();
    			sresultat.first();
    			// Envoi du résultat au client
    			sortie.writeObject(sresultat);
    		} catch (Exception ex) {
    		System.out.println("Erreur d'exécution de la requête SQL*: "+ex);
    		}
    	}
     
    	public SerializedResultSet ExecuterRequete()
    	{
    		try
    		{ 
    			// Exécution de la requête
    			BD=ds.getConnection();
    			Statement s = BD.createStatement();
    			ResultSet r = s.executeQuery("select * from personne where nom= '"+nomPersonne+"'");
    			// Transformation du ResultSet en sResultSet
    			java.sql.ResultSetMetaData columnNames = r.getMetaData();
    			SResultSet.SerializedResultSet sResultSet = new SResultSet.SerializedResultSet();
    		for (int i = 1; i <= columnNames.getColumnCount(); i++) {
    			sResultSet.addColumn(columnNames.getColumnName(i), i);
    			}
    			while (r.next()) {
    				for (int column = 1; column <= columnNames.getColumnCount(); column++) {
    				sResultSet.addColumnData(column, r.getObject(column));
    				}
    			}
     
    			r.close();
    			s.close();
    			BD.close();
    			s = null;
    			r = null;
    			return sResultSet;
    		}
    		catch (java.sql.SQLException ex) {
    				System.out.println("Erreur d'exécution de la requête SQL \n"+ex);
    				return null;
    		}
    	}
     
    	public void init() throws ServletException {
    		try {
    			Context initCtx = new InitialContext();
    			System.out.println("lookup de env");
    			Context envCtx = (Context) initCtx.lookup("java:comp/env");
    			System.out.println("lookup de base_test");
    			ds=(DataSource) envCtx.lookup("base_test");
     
    		}
    		catch(Exception er) {
    			System.out.println("Erreur de chargement du contexte " + er);
    		}
    	}
    }

    voici mon fichier web.xml au cas ou:

    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
        <display-name>Mes servlets</display-name>
        <description>
          Premi�res servlets
        </description>
    	<servlet>
    	<servlet-name>ServletBD</servlet-name> 
    	<servlet-class>MesServlets.ServletRequete</servlet-class> 
    	<description>Servlet d'essai de la connection BD</description> 
        </servlet>
    <servlet-mapping> 
    	<servlet-name>ServletBD</servlet-name>
    	<url-pattern>/requete</url-pattern> 
    </servlet-mapping>
    </web-app>

    et voici l'arborescence de mon projet :

    Nom : Capture.PNG
Affichages : 330
Taille : 11,1 Ko
    mon erreur se lance quand je clique sur le bouton chercher l'erreur viendrait d'après le débogueur de la fonction rechercher
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    listeResultat.setListData(contenu);
    je viens juste de commencer si vous pouviez m'aidez s'il vous plaît,si vous avez besoin d'info ou de fichier supplémentaire n'hésiter pas cordialement.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    On obtient cette exception lorsqu'on essaye d'appeler une méthode ou accèder à un attribut sur une variable qui n'a pas été initialisée, c'est-à-dire qui ne pointe sur aucune instance d'objet (soit qui contient la valeur null, d'où le nom de l'exception).

    Dans ton code, tu déclares une variable membre, d'instance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private JList listeResultat;
    Puis dans la méthode Rechercher, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeResultat.setListData(contenu);
    et là tu obtiens une NullPointerException. C'est normal puisque cette variable n'a jamais été initialisée.

    Tu vas (probablement) me dire : "mais si, là, à la fin de mon constructeur, je le fais : "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public AppletRecherche() {
    		getContentPane().setLayout(null);
     
                    ...		
     
    		JList listeResultat = new JList();
    		listeResultat.setBounds(0, 85, 450, 215);
    		getContentPane().add(listeResultat);
     
    	}
    En fait, ici (dans la ligne JList listeResultat = new JList();, tu déclares une nouvelle variable locale au constructeur, qui a le même nom que la variable d'instance, et remplace temporairement (dans le constructeur) la variable déclarée dans la classe. Donc tu initialises une autre variable, mais pas celle de la classe, qui continue de contenir null.

    Il fallait écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public AppletRecherche() {
    		getContentPane().setLayout(null);
     
                    ...		
     
    		listeResultat = new JList();
    		listeResultat.setBounds(0, 85, 450, 215);
    		getContentPane().add(listeResultat);
     
    	}
    Ou, tu aurais pu faire (théoriquement, mais ça permet de voir la différence) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public AppletRecherche() {
    		getContentPane().setLayout(null);
     
                    ...		
     
    		JList listeResultat = new JList();
                    this.listeResultat = listeResultat; // ICI ON MET LA VALEUR DE LA VARIABLE LOCALE DANS LA VARIABLE D'INSTANCE
    		listeResultat.setBounds(0, 85, 450, 215);
    		getContentPane().add(listeResultat);
     
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Je vous remercie joel.drigo en effet cela fonctionne merci beaucoup pour les explications, en tout cas je me coucherais moins bête!

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

Discussions similaires

  1. Erreur java. lang.NullPointerException
    Par hicham.gi dans le forum Struts 1
    Réponses: 17
    Dernier message: 03/06/2009, 11h11
  2. Réponses: 2
    Dernier message: 30/04/2008, 15h14
  3. Réponses: 32
    Dernier message: 20/04/2007, 21h56
  4. [Débutant] Erreur java.lang.NullPointerException
    Par Kevin12 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/02/2007, 15h48
  5. Probleme erreur java.lang.NullPointerException
    Par Tsukaasa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 18h19

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