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

 Java Discussion :

Erreur "NullPointerException" java swing


Sujet :

Java

  1. #1
    Membre régulier
    Erreur "NullPointerException" java swing
    Bonjour,

    Alors je sollicite votre aide pour une erreur que j'ai eu sans trop comment savoir pourquoi.

    Voici le code du form :

    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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package maj_exfiles;
    import javax.swing.*;
    import java.sql.*;
     
     
    /**
     *
     * @author chafy
     */
    public class Form_Authentification extends javax.swing.JFrame {
     
     
        Connection cnx = null;
        PreparedStatement prepared = null;
        ResultSet resultat = null;
        /**
         * Creates new form Form_Authentification
         */
        public Form_Authentification() {
            initComponents();
        }
     
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jLabel1 = new javax.swing.JLabel();
            jLabel2 = new javax.swing.JLabel();
            txtLoginU = new javax.swing.JTextField();
            txtMdpU = new javax.swing.JPasswordField();
            btnAnnuler = new javax.swing.JButton();
            btnConnexion = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            jLabel1.setText("Nom d'utilisateur :");
     
            jLabel2.setText("Mot de passe : ");
     
            txtMdpU.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    txtMdpUActionPerformed(evt);
                }
            });
     
            btnAnnuler.setText("Annuler");
     
            btnConnexion.setText("Se Connecter");
            btnConnexion.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnConnexionActionPerformed(evt);
                }
            });
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(193, 193, 193)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addComponent(btnAnnuler, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(txtLoginU)
                            .addComponent(txtMdpU, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE))
                        .addComponent(btnConnexion))
                    .addContainerGap(51, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(63, 63, 63)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel1)
                        .addComponent(txtLoginU, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(28, 28, 28)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel2)
                        .addComponent(txtMdpU, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(44, 44, 44)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(btnAnnuler)
                        .addComponent(btnConnexion))
                    .addContainerGap(78, Short.MAX_VALUE))
            );
     
            pack();
        }// </editor-fold>                        
     
        private void txtMdpUActionPerformed(java.awt.event.ActionEvent evt) {                                        
            // TODO add your handling code here:
        }                                       
     
        private void btnConnexionActionPerformed(java.awt.event.ActionEvent evt) {                                             
            String loginU = txtLoginU.getText();
            String mdpU = txtMdpU.getText();
     
            String sql = "select loginU, mdpU from dbo.utilisateur where loginU=? and mdpU=?";
            try{
                prepared = cnx.prepareStatement(sql);
                prepared.setString(1,loginU);
                prepared.setString(2,mdpU);
     
                resultat = prepared.executeQuery();
     
     
                if(resultat.next()){
     
                       JOptionPane.showMessageDialog(null,"Bienvenue dans votre espace "+loginU);
     
     
                }
                else{
                    JOptionPane.showMessageDialog(null,"Veuillez réessayer..");
                    txtLoginU.setText("");
                    txtMdpU.setText("");
                }
     
            }catch(SQLException e){
                e.printStackTrace();
     
     
     
     
            }      
     
        }                                            
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(Form_Authentification.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(Form_Authentification.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(Form_Authentification.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(Form_Authentification.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
     
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new Form_Authentification().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JButton btnAnnuler;
        private javax.swing.JButton btnConnexion;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JTextField txtLoginU;
        private javax.swing.JPasswordField txtMdpU;
        // End of variables declaration                   
    }


    et

    L'erreur se trouve ci - dessous :

    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at maj_exfiles.Form_Authentification.btnConnexionActionPerformed(Form_Authentification.java:115)
    	at maj_exfiles.Form_Authentification.access$100(Form_Authentification.java:15)
    	at maj_exfiles.Form_Authentification$2.actionPerformed(Form_Authentification.java:61)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    	at java.awt.Component.processMouseEvent(Component.java:6539)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    	at java.awt.Component.processEvent(Component.java:6304)
    	at java.awt.Container.processEvent(Container.java:2239)
    	at java.awt.Component.dispatchEventImpl(Component.java:4889)
    	at java.awt.Container.dispatchEventImpl(Container.java:2297)
    	at java.awt.Component.dispatchEvent(Component.java:4711)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    	at java.awt.Container.dispatchEventImpl(Container.java:2283)
    	at java.awt.Window.dispatchEventImpl(Window.java:2746)
    	at java.awt.Component.dispatchEvent(Component.java:4711)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    	at java.awt.EventQueue.access$500(EventQueue.java:97)
    	at java.awt.EventQueue$3.run(EventQueue.java:709)
    	at java.awt.EventQueue$3.run(EventQueue.java:703)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    	at java.awt.EventQueue$4.run(EventQueue.java:733)
    	at java.awt.EventQueue$4.run(EventQueue.java:731)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    BUILD SUCCESSFUL (total time: 4 seconds)


    Comme l'erreur est un "NullPointerException", j'ai vérifié que mes objets n'étaient pas vides lors du lancement du programme.
    Le problème est que tout marchait parfaitement bien jusqu'au moment où j'ai voulu ajouter à l'interface un "panel'' pour lui donner un peu plus de beauté.
    Après l'ajout de celui - ci, le programme ne marchait pas et après la suppression (CTRL+Z) du "panel" le programme marchait toujours pas alors que je n'ai pas touché au code.

    Je vous remercie d'avance pour vos futurs conseils.

  2. #2
    Modérateur

    Salut,

    Si on se base sur le code que tu montres, la ligne 115 dans la classe Form_Authentification, ça serait : prepared = cnx.prepareStatement(sql);. Ça serait donc cnx qui est null. Vu le seul code que tu montres, vu que tu lui affectes null dans la déclaration et qu'il n'y a aucune autre affectation de cette variable, forcément cnx vaut null. Tu dois avoir une affectation de cette variable qui s'exécute avant qu'on invoque prepareStatement().
    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. ###raw>post.musername###
    Membre régulier
    Salut,

    Alors j'ai essayé de résoudre mon problème en évitant de mettre les objets en attributs et en les mettant à l'intérieur de la méthode, en leur supprimant l'affectation "= null" mais rien n'y fait.

    J'ai aussi une autre classe DBConnex, qui me permet de me connecter à ma BDD sous SQL Server.

    le code de celle - ci :

    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
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package maj_exfiles;
    import java.sql.*;
    import javax.swing.*;
     
     
    /**
     *
     * @author chafy
     */
    public class DBConnex {
     
        Connection conn = null;
     
        public static Connection ConnectDB(){
            try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=exfiles;integratedSecurity=true;","LAPTOP-O6TEJHR5\\chafy","");
            return conn;
            }catch(Exception e){
                JOptionPane.showMessageDialog(null,e);
                return null;
            }
        }
     
    }


    Je vais continuer mes recherches de mon côté, merci pour l'intervention !
      0  0

  4. #4
    Modérateur

    Et bien dans ce cas :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void btnConnexionActionPerformed(java.awt.event.ActionEvent evt) {                                             
            String loginU = txtLoginU.getText();
            String mdpU = txtMdpU.getText();
     
            String sql = "select loginU, mdpU from dbo.utilisateur where loginU=? and mdpU=?";
     
            try(Connection cnx = DBConnex.ConnectDB() ) { // récupération d'une connexion
                prepared = cnx.prepareStatement(sql);
                prepared.setString(1,loginU);
                prepared.setString(2,mdpU);
               /*... etc ...*/


    En revanche en cas d'exception dans ConnectDB, cnx sera null et donc NullPointerException aussi, à la lignecnx.prepareStatement(sql);.

    A noter également que l'attribut conn de DBConnex vaudra toujours null.
    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.

  5. #5
    Membre régulier
    Ah c'est bon j'ai trouvé mon erreur. Je vais l'expliquer ici, ça peut servir à des personnes dans ma situation :

    Il s'avère que dans Netbeans on ne peut pas modifier directement la procédure d'initialisation. Et du coup, j'avais mis ma connexion d'accès à la base de données dans cette procédure. Et comme il est écrit dans les commentaires auto-générés :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */


    Et lors de l'ajout du panel, cette procédure s'est réinitialisée avec les composants de bases, en supprimant l'ajout que j'avais fait pour l'accès à la BDD.

    Et voilà... maintenant il faut faire attention ! Merci en tout cas de m'avoir mis sur la voie !

  6. #6
    Membre régulier
    Citation Envoyé par joel.drigo Voir le message
    Et bien dans ce cas :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void btnConnexionActionPerformed(java.awt.event.ActionEvent evt) {                                             
            String loginU = txtLoginU.getText();
            String mdpU = txtMdpU.getText();
     
            String sql = "select loginU, mdpU from dbo.utilisateur where loginU=? and mdpU=?";
     
            try(Connection cnx = DBConnex.ConnectDB() ) { // récupération d'une connexion
                prepared = cnx.prepareStatement(sql);
                prepared.setString(1,loginU);
                prepared.setString(2,mdpU);
               /*... etc ...*/


    En revanche en cas d'exception dans ConnectDB, cnx sera null et donc NullPointerException aussi, à la lignecnx.prepareStatement(sql);.

    A noter également que l'attribut conn de DBConnex vaudra toujours null.
    Yes, j'ai pu remarqué ça quand j'ai fait un point d'arrêt sur la ligne