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

NetBeans Java Discussion :

Multi Package Problem


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut Multi Package Problem
    Bonjour à tous, voilà j'ai un problème et je vais tenter de vous l'expliquer sans être trop confus.

    Mon application utilise une base de données MySQL.

    J'ai 3 packages :

    - labergeriemanager : Contenant le Main et ne servant qu'à lancer l'ihm :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package labergeriemanager;
    import ihm.*;
     
    public class Main {
        public Main(){
     
        }
     
        public static void main(String[] args) {
            // TODO code application logic here
            new JF_Princ().setVisible(true);
     
        }
    }
    - ihm : Donc contenant le JFrame et tous les composants graphiques :

    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
    package ihm;
    import classes.*;
    
    public class JF_Princ extends javax.swing.JFrame {
    
        public JF_Princ() {
            initComponents();
            objConnexion = new ConnexionBdD();
        }
        
        public void Debug(String prmMessage){
            Message = prmMessage ;
            TA_Debug.setText("");
            TA_Debug.setText(Message);
        }
        @SuppressWarnings("unchecked")                    
    
        private void Btn_ConnexionActionPerformed(java.awt.event.ActionEvent evt) {                                              
            // TODO add your handling code here: 
            Log = TF_Log.getText();
            Pass = TF_Pass.getText();
            TA_Debug.setText("lol");
            objConnexion.OuvrirConnexion(Log, Pass, "jdbc:mysql://127.0.0.1:3306/Bergerie");
        }                                             
    
        private void formWindowClosing(java.awt.event.WindowEvent evt)      {                                   
            // TODO add your handling code here:
            objConnexion.FermerConnexion();
        }                                  
    
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new JF_Princ().setVisible(true);
                }
            });
        }
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton Btn_Connexion;
        private javax.swing.JScrollPane SP_Debug;
        private javax.swing.JTextArea TA_Debug;
        private javax.swing.JTextField TF_Log;
        private javax.swing.JTextField TF_Pass;
        // End of variables declaration                   
        private String Log ;
        private String Pass ;
        private static ConnexionBdD objConnexion ;
        private String Message ;
    }
    - classes : Contenant les classes comme celle pour se connecter à la BdD :

    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
    package classes;
    import java.sql.*;
    import ihm.*;
    
    public class ConnexionBdD {
        public ConnexionBdD(){
            objIHM = new JF_Princ();
            try{
                Class.forName("com.mysql.jdbc.Driver"); 
                objIHM.Debug("Driver ok !");
                System.out.println("Driver");
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        public void OuvrirConnexion(String prmUser, String prmPassword, String prmURL){
            try{
                connexion = DriverManager.getConnection(prmURL,prmUser,prmPassword);
                etat = connexion.createStatement();
                System.out.println("connexion");
                objIHM.Debug("connexion");
            }catch(Exception e){
                System.out.println("erreur de connexion");
                e.printStackTrace();
            }
        }
        public void FermerConnexion(){
            try{
                connexion.close();
                System.out.println("close");
            }catch(Exception e){
                System.out.println("erreur de fermeture");
                e.printStackTrace();
            }
        }
        public void EcrireTableTClient(String prmNom, String prmPrenom){
            String requete = "INSERT INTO t_client(NOM, PRENOM)VALUES('"+prmNom+"','"+prmPrenom+"');";
            try{
                etat.executeUpdate(requete);
            }catch(Exception e){
                System.out.println("Erreur requête");
                e.printStackTrace();
            }
        }
        private Connection connexion = null ;
        private Statement etat = null ;
        private ResultSet resultat = null ;
        private static JF_Princ objIHM ;
    }
    Sans la partie en rouge, mon programme fonctionne ainsi que la connexion à la BdD.

    Et en rouge c'est la partie que j'ai rajouté en dernier qui fait que mon programme n'ouvre plus l'IHM en fait, et je ne sais pas pourquoi...

    J'ai fais ce code afin de pouvoir renvoyer les informations du déroulement de la connexion sur un TextArea nommé TA_Debug.

    Une idée de l'erreur faite de ma part ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Toujours regarder les messages d'erreur dans la console et tu saura pourquoi ton IHM ne démarre pas (exception)!
    Sans en savoir plus, je suppose que TA_Debug est null.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    En fait je n'ai pas de message d'erreur, mon programme se lancer mais reste bloqué si on peut dire... Merci de ta réponse je vais voir si TA_Debug est null mais j'ai du mal à comprendre pourquoi il l'est...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Par défaut
    c'est assez simple ton problème.

    1) avec ton main tu ouvre ton frame

    new JF_Princ().setVisible(true);
    2) avec ce frame tu creer ta connexion a ta BDD

    objConnexion = new ConnexionBdD();
    3) et dans cet objet ConnexionBdD() tu refais
    objIHM = new JF_Princ();
    voila pourquoi tu as un soucis lorsque tu essaye de réouvrir ton IHM.

    pour moi je ferais un truc du genre :

    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
    public class Main {
     
        public JF_Princ monFrame;
     
       public Main(){
     
           monFrame = new JF_Princ();
           monFrame.setVisible(true);
        }
     
        public static void main(String[] args) {
            // TODO code application logic here
            Main();
     
        }
    }
    et dans la classe ConnexiondD()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public ConnexionBdD(){      
            try{
                Class.forName("com.mysql.jdbc.Driver"); 
                Main.monFrame.Debug("Driver ok !");
                System.out.println("Driver");
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    A moins que je n'ai rien compris, je pense que ton problème viens de là

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Rhadamenthys Voir le message
    A moins que je n'ai rien compris, je pense que ton problème viens de là
    Le probleme viens bien de là. Mais vu que l'attribut monFrame de la classe Main n'est pas static, il y aura un soucis. Il faut donc ajuster le code comme suit :
    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 Main {
     
        public static JF_Princ monFrame;
     
       public Main(){
     
           monFrame = new JF_Princ();
           monFrame.setVisible(true);
        }
     
        public static void main(String[] args) {
            // TODO code application logic here
            Main();
     
        }
    }
    Le probleme venait du fait que __sPiKe__, utilise deux objets differents. La fenetre visible n'est pas celle à qui les messages envoyés dans la classe qui fait la connexion à la base de données est destinée.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Par défaut
    Merci d'avoir corrigé ma petite erreur

    Effectivement il manquait le "static".

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Je ré-ouvre car j'ai pleins d'avertissements quand j'exécute

    Voici mes erreurs juste en lançant mon programme et en le fermant tout de suite :

    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
    run:
    java.lang.NullPointerException
            at classes.ConnexionBdD.<init>(ConnexionBdD.java:10)
            at ihm.JF_Princ.<init>(JF_Princ.java:8)
            at labergeriemanager.Main.<init>(Main.java:10)
            at labergeriemanager.Main.main(Main.java:16)
    java.lang.NullPointerException
            at classes.ConnexionBdD.FermerConnexion(ConnexionBdD.java:27)
            at ihm.JF_Princ.formWindowClosing(JF_Princ.java:149)
            at ihm.JF_Princ.access$000(JF_Princ.java:4)
            at ihm.JF_Princ$1.windowClosing(JF_Princ.java:43)
            at java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:332)
            at java.awt.Window.processWindowEvent(Window.java:1865)
            at javax.swing.JFrame.processWindowEvent(JFrame.java:274)
            at java.awt.Window.processEvent(Window.java:1823)
            at java.awt.Component.dispatchEventImpl(Component.java:4630)
            at java.awt.Container.dispatchEventImpl(Container.java:2099)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4460)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    GÉNÉRATION TERMINÉE (durée totale* 4 secondes)
    Et voici le type de lignes auxquelles elles font références :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Main.monFrame.Debug("Driver");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objConnexion = new ConnexionBdD();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monFrame = new JF_Princ();
    Et ça c'est juste pour la partie en rouge :/

    Je dois faire quelque chose mais quoi ? des delete ?

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu manipule une référence null à la ligne de code indiquée par le message d'erreur. Regarde sur cette ligne tout ce qui se trouve à gauche d'un point '.', c'est tout ce qui ne peux pas être null sous peine d'exception.

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Mais comment ne pas le mettre null ? Et ou surtout ?

  10. #10
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par __sPiKe__ Voir le message
    Mais comment ne pas le mettre null ? Et ou surtout ?
    Dans netbeans, quand il y a des exceptions runtime, tu peux cliquer sur les lignes dans la console pour voir où s'est produit l'exception.

    Sinon, on peux voir la version du code de la classe ConnexionBdD que tu utilises?

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Voici la classe ConnexionBdD en intégralité :

    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
    package classes;
    import java.sql.*;
    import labergeriemanager.Main;
     
    public class ConnexionBdD {
     
        public ConnexionBdD(){
            try{
                Class.forName("com.mysql.jdbc.Driver");
                Main.monFrame.Debug("Driver");
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        public void OuvrirConnexion(String prmUser, String prmPassword, String prmURL){
            try{
                connexion = DriverManager.getConnection(prmURL,prmUser,prmPassword);
                etat = connexion.createStatement();
                Main.monFrame.Debug("Connecté");
            }catch(Exception e){
                Main.monFrame.Debug("Erreur lors de la connexion");
                e.printStackTrace();
            }
        }
        public void FermerConnexion(){
            try{
                connexion.close();
                Main.monFrame.Debug("Connexion Arrêtée");
            }catch(Exception e){
                Main.monFrame.Debug("Erreur lors de la fermeture");
                e.printStackTrace();
            }
        }
        public void EcrireTableTClient(String prmNom, String prmPrenom){
            String requete = "INSERT INTO t_client(NOM, PRENOM)VALUES('"+prmNom+"','"+prmPrenom+"');";
            try{
                etat.executeUpdate(requete);
            }catch(Exception e){
                System.out.println("Erreur requête");
                e.printStackTrace();
            }
        }
     
        private Connection connexion = null ;
        private Statement etat = null ;
        private ResultSet resultat = null ;
    }
    Autre chose qui pourrait avoir un rapport, lorsque je veux débugger dans cette classe j'ai un message comme quoi il n'y a pas de méthode main..

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

Discussions similaires

  1. Multi preload probleme
    Par yuyu599 dans le forum Flash
    Réponses: 2
    Dernier message: 03/07/2007, 11h22
  2. [Multi-threading] Probleme avec les mutex
    Par homeostasie dans le forum Visual C++
    Réponses: 2
    Dernier message: 07/03/2007, 10h00
  3. [Language][Package]Probleme de portée d'un Objet
    Par julien.v dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2005, 14h23
  4. [Classpath][packages] problème de lancement de l'appli
    Par gogozep001 dans le forum Général Java
    Réponses: 11
    Dernier message: 19/05/2005, 23h35
  5. Packages - problème de dependances
    Par Invité dans le forum Administration système
    Réponses: 3
    Dernier message: 14/06/2004, 10h46

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