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

C# Discussion :

exeption c# NullReferenceException


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut exeption c# NullReferenceException
    Bonjour, je suis actuellement sur un projet d'étude d'une station de pompage d'eau pour les agriculteur, pour cela je simule une arriver d'eau avec débit pression etc.. Je lance le débit grace a une scrool_bar mais lors de l'assignation de celle ci a une jauge (outils iocomp) une exception ce créée du type NullReferenceException
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<Compteur> listeCompteur; // Liste créee dans la classe ControleCompteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     lesCompteurs.Add(new Compteur(lesCanalisations[0],"1234"));
                lesCompteurs.Add(new Compteur(lesCanalisations[1],"7654"));
                lesCompteurs.Add(new Compteur(lesCanalisations[2],"6789")); 
                    // ajout de compteur dans la liste lesCOmpteur dans la classe Simulateur
    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
     
      public string numCompteur;
     
            public string NumCompteur
            {
                get { return numCompteur; }
                set { numCompteur = value; }
            }
     public Compteur(Canalisation canal, string numCompteur) {
     
                this.canal = canal;
                this.numCompteur = numCompteur;
                debitPrec = 0;
                monTimer = new Timer();
                monTimer.Tick += new EventHandler(timer_Tick);
                monTimer.Interval = 1000;
     
                monTimer.Start();
     
            } // classe compteur
    On retourne dans la classe simulateur ou l’exception ce passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     private void trackBar1_Scroll(object sender, EventArgs e)
           {
     
               if (this.monCompteur.NumCompteur == "1234") // ici 
               {
                   maCentrale.getGauge2Compteur().Value = trackBar1.Value;
               }
     
           }
    voila j’espère que je ne vous est pas trop embrouillé ^^ merci d'avance de votre aide je retourne me creusé les méninges

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (this.monCompteur.NumCompteur == "1234") // ici
    si votre erreur se passe sur cette ligne , ou la variable monCompteur est null, ou le NumCompteur n'est pas initialisée
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    Peux tu envoyer la stack d'erreur souvent l'explication est dedans

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (this.monCompteur.NumCompteur == "1234") // ici
    si votre erreur se passe sur cette ligne , ou la variable monCompteur est null, ou le NumCompteur n'est pas initialisée
    Bonjour, Merci de votre réponse, monCompteur est bien null au debeugage pourtant l'agrégation est bien présente si non je n'aurais pas accès à la variable numCompteur ?

  5. #5
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Au vu de l'exception et de votre code c'était un ou l'autre mais je penchais plus effectivement pour monCompteur. Je suppose que votre NumCompteur est un type de base numérique donc lui ne devrais pas poser de problème.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut
    Citation Envoyé par morgand Voir le message
    Peux tu envoyer la stack d'erreur souvent l'explication est dedans
    Bonjour, merci de votre réponse le stack me répond ça : " La référence d'objet n'est pas définie à une instance d'un objet."

    ma référence ( monCompteur) a la classe ControlCompteur est null pourtant j'ai accès a ces variables

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Au vu de l'exception et de votre code c'était un ou l'autre mais je penchais plus effectivement pour monCompteur. Je suppose que votre NumCompteur est un type de base numérique donc lui ne devrais pas poser de problème.
    Oui je pense aussi numCopteur est un string retournée en get set et passer en paramètre d'une fonction Compteur pour ensuite crée 3 compteur avec des nom aléatoire que je chargerais dans un fichier xml mais le problème ici c'est que je ne comprend pas pourquoi ma référence a ma classe est null avez vous une idée ?

  8. #8
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Il serait intéressant de poster les 2 classes complètes car avec seulement les quelques morceaux de votre premier post, il est difficile de dire ce qui se passe entre l'instanciation et la fonction ou vous avez l'exception.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Il serait intéressant de poster les 2 classes complètes car avec seulement les quelques morceaux de votre premier post, il est difficile de dire ce qui se passe entre l'instanciation et la fonction ou vous avez l'exception.
    voilà

    Classe simulateur
    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
     
    //Classe simulateur 
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Iocomp.Instrumentation.Standard;
    using System.Threading;
     
     
    namespace Compteurs
    {
        public partial class FormSimulateur : Form 
        {
            Canalisation maCanalisation;
            Compteur monCompteur;
            ControleCompteurs monControle;
            CentraleAcquisition maCentrale;
     
     
     
            internal Compteur MonCompteur
            {
                get { return monCompteur; }
                set { monCompteur = value; }
            }
     
     
            List<Compteur> lesCompteurs = new List<Compteur>();  //Création d'une Liste de Compteurs
     
            public List<Compteur> LesCompteurs
            {
                get { return lesCompteurs; }
                set { lesCompteurs = value; }
            }
     
            List<Canalisation> lesCanalisations = new List<Canalisation>(); //Création d'une Liste de Canalisations
     
     
     
     
            public FormSimulateur()
            {
                InitializeComponent();
     
                lesCanalisations.Add(new Canalisation(this.pipe1));
                lesCanalisations.Add(new Canalisation(this.pipe2));
                lesCanalisations.Add(new Canalisation(this.pipe3));
     
                lesCompteurs.Add(new Compteur(lesCanalisations[0],"1234"));
                lesCompteurs.Add(new Compteur(lesCanalisations[1],"7654"));
                lesCompteurs.Add(new Compteur(lesCanalisations[2],"6789"));
     
     
                maCentrale = new CentraleAcquisition(this);
                monControle = new ControleCompteurs(maCentrale, this.LesCompteurs);
                maCentrale.Hide();
                this.btn_AccesCentrale.Text = "Afficher la centrale";
     
     
                maCanalisation = new Canalisation(this.pipe1);
     
     
            }
     
         /*   public void Attente()
            {
              
              form1.getGauge2Compteur().Invoke(new TrackBarHandler(Affichage));
            }
     
            public void Affichage()
            {
                if (form1.getLabel8().Text == "1")
                {
                    form1.getGauge2Compteur().Value = trackBar1.Value;
                }
                if (form1.getLabel8().Text == "2")
                {
                    form1.getGauge2Compteur().Value = trackBar2.Value;
                }
                if (form1.getLabel8().Text == "3")
                {
                    form1.getGauge2Compteur().Value = trackBar3.Value;
                }
            
            }
          */
     
            private void trackBar1_ValueChanged(object sender, EventArgs e)
            {
     
               lesCanalisations[0].Debit = trackBar1.Value;
     
            }
     
           public void btn_AccesCentrale_Click(object sender, EventArgs e)
            {
                if (this.maCentrale.Visible == false)
                {
                    maCentrale.label8.Text = monControle.listeCompteur[monControle.indexCompteur_InfoCompteur].NumCompteur.ToString();
                    this.maCentrale.Show();
                    this.btn_AccesCentrale.Text = "Masquer la centrale";
     
                }
                else {
     
                    this.maCentrale.Hide();
                    this.btn_AccesCentrale.Text = "Afficher la centrale";
     
                }
            }
     
           private void trackBar1_Scroll(object sender, EventArgs e)
           {
     
               if (this.monCompteur.NumCompteur == "1234")
               {
                   maCentrale.getGauge2Compteur().Value = trackBar1.Value;
               }
     
           }
     
           private void trackBar2_Scroll(object sender, EventArgs e)
           {
               if (monCompteur.NumCompteur == "7654")
               {
                   maCentrale.getGauge2Compteur().Value = trackBar2.Value;
               }
           }
     
           private void trackBar3_Scroll(object sender, EventArgs e)
           {
               if (monCompteur.NumCompteur == "6789")
               {
                   maCentrale.getGauge2Compteur().Value = trackBar3.Value;
               }
     
           }
     
           private void FormSimulateur_Load(object sender, EventArgs e)
           {
     
           }
     
     
     
     
     
        }
    }
     
    Classe Compteur
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Iocomp.Instrumentation.Standard;
    using System.Xml.Linq;
    using System.IO;
    using System.Web;
    using System.Windows.Forms;
     
     
    namespace Compteurs
    {
        public class Compteur 
        {
            private Canalisation canal;
            private double debitActuel;
            private double debitPrec;
            private double consommationTotalisee = 0;
     
            public double ConsommationTotalisee1
            {
                get { return consommationTotalisee; }
     
            }
            public string numCompteur;
     
            public string NumCompteur
            {
                get { return numCompteur; }
                set { numCompteur = value; }
            }
     
     
     
            public double ConsommationTotalisee
            {
                get { return consommationTotalisee; }
                set { consommationTotalisee = value; }
            }
     
            private Timer monTimer;
     
     
            public Compteur(Canalisation canal, string numCompteur) {
     
                this.canal = canal;
                this.numCompteur = numCompteur;
                debitPrec = 0;
                monTimer = new Timer();
                monTimer.Tick += new EventHandler(timer_Tick);
                monTimer.Interval = 1000;
     
                monTimer.Start();
     
            }
     
             private void timer_Tick(object sender, EventArgs e)
            {
                this.debitActuel = this.canal.Debit;
     
                this.consommationTotalisee += (((this.debitPrec + this.debitActuel) / 2) * 1)*3600;
                this.debitPrec = this.debitActuel;
            }
        }
    }

  10. #10
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    dans ton simulateur il n'y a nul part où tu instancies MonCompteur. Normal donc que ca ne fonctionne pas!
    Je ne sais pas bien quel est ton besoin, mais tu peux en creer un dans le constructeur de ta form.

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut
    Je pense que cela viens des liste la référence qu'utilise ma condition fait appel a rien juste comme il n'est pas instancié donc il faut que je récupère ces info depuis la list j'avait pensé a un list.get mais ça n’existe pas dans ce conteste :/

  12. #12
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Citation Envoyé par Amiral62 Voir le message
    Je pense que cela viens des liste la référence qu'utilise ma condition fait appel a rien juste comme il n'est pas instancié donc il faut que je récupère ces info depuis la list j'avait pensé a un list.get mais ça n’existe pas dans ce conteste :/
    Rien compris
    MonCompteur est censé faire partie de la liste lesCompteurs ?

  13. #13
    Membre confirmé
    Femme Profil pro
    Etudiante en Développement
    Inscrit en
    Avril 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante en Développement
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 106
    Par défaut
    micka132 a raison, pour corriger l'erreur il faut que tu fasses un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monCompteur = new Compteur(...);
    avant d'essayer d'accéder à monCompteur.NumCompteur
    Tu as bien créé des nouveaux compteurs dans ta liste lesCompteurs; mais monCompteur n'est jamais instancié

    Si tu souhaites récupérer un des compteurs de ta liste, il existe des méthodes :

    First() => renvoie le 1er élément
    Last() => envoie le dernier élément

    Tu peux aussi faire une recherche précise de cette manière :
    (exemple si tu veux récupérer celui qui a NumCompteur = 1234)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monCompteur = lesCompteurs.Find(p => p.NumCompteur = "1234");

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Par défaut
    Bonjour, merci de vos réponse, j'ai trouvé le probléme il vennais du fait que les association crée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     maCentrale = new CentraleAcquisition(this);
                monControle = new ControleCompteurs(maCentrale, this.LesCompteurs);
    été mal placé on faisais appel a une référence d'objet qui n'été pas encore crée.

    la création d'un compteur n'été pas obligatoire comme ils sont crée dans les liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      lesCompteurs.Add(new Compteur(lesCanalisations[0],"1234"));
    voila je vous re merci pour votre attentions à bientôt

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

Discussions similaires

  1. servlet exeption Oc4j
    Par chouchou93 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/06/2006, 11h42
  2. gestion des exeptions sous delphi6
    Par meghaoui dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/05/2006, 14h30
  3. [VB.NET] System.NullReferenceException
    Par LeGrosWinnie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 29/12/2005, 13h31
  4. exeptions
    Par ZaaN dans le forum C++
    Réponses: 4
    Dernier message: 08/12/2005, 11h19
  5. [JDBC]Exeption inopportune
    Par ebaynaud dans le forum JDBC
    Réponses: 2
    Dernier message: 07/09/2004, 12h08

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