C# - Erreur NullReferenceException [Résolu]

Messages postés
29
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
5 décembre 2009
- - Dernière réponse : skyline86
Messages postés
29
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
5 décembre 2009
- 27 févr. 2009 à 16:06
Bonjour, 'ai un message NullReferenceException
sur la ligne



    Program.monFormulaire.lb_log.BeginInvoke(new GPRSListener.Principale.affichageLog(Program.monFormulaire.log), new object[] { resultat });

et je ne comprend pas pourquoi cela ne fonctionne pas. Est ce que quelqu'un peut m'aider ???

Fichier 1 : Program.cs :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;

    namespace GPRSListener
    {
    static class Program
    {
    public static Principale monFormulaire;
    /// <summary>
    /// Point d'entrée principal de l'application.
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Principale());
    }
    }
    }

Fichier 2 : principale.cs :

    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 MySql.Data.MySqlClient;
    using System.Net.Sockets;
    using System.Net;
    using System.IO;
    using System.Collections;
    using System.Threading;

    namespace GPRSListener
    {
    public partial class Principale : Form
    {
    private List maListeBoitier = new List();
    private List<TCPConnexion> maListeTCPConnexion = new List<TCPConnexion>();
    private MySQL maConnexion;
    private Thread monThread = null;
    private IPAddress IPlocal = IPAddress.Parse("127.0.0.1");
    public delegate void affichageLog(string msg);

    public Principale()
    {
    InitializeComponent();
    maConnexion = new MySQL("127.0.0.1", "3306", "opthortest", "root", "root");
    }

    private void btn_ecouter_Click(object sender, EventArgs e)
    {
    MySqlDataReader monReader = maConnexion.execute_select_multi("SELECT id_device_affect as 'boitier' FROM affect_device WHERE '" + DateTime.Today.ToString("yyyy-MM-dd") + "' BETWEEN start_date AND end_date");

    // création des objets Boitier
    while (monReader.Read())
    {
    maListeBoitier.Add(new Boitier(monReader.GetInt32("boitier")));
    }

    // création des TcpListener en fonction de la liste des Boitiers
    for (int i = 0; i < maListeBoitier.Count; i++)
    {
    maListeTCPConnexion.Add(new TCPConnexion(maListeBoitier[i].get_port()));
    }
    }

    public void log(string msg)
    {
    lb_log.Items.Add(msg);
    int index = lb_log.Items.IndexOf(msg);
    lb_log.SetSelected(index, true);
    }
    }
    }

Fichier 3 : Boitier.cs :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data.MySqlClient;

    namespace GPRSListener
    {
    public class Boitier
    {
    /* ***********************************************************
    * ATTRIBUTS
    * ********************************************************* */
    private MySQL maConnexion2;
    private int idBoitier;
    private string nomBoitier;
    private int port;
    private int idBus;
    private string nomBus;
    private int idReseau;
    private string nomReseau;
    private int idCampagne;
    private string nomCampagne;

    /* ***********************************************************
    * CONSTRUCTEUR
    * ********************************************************* */
    public Boitier(int boitierID)
    {
    // Ouverture d'un nouvelle connexion à la base de données
    maConnexion2 = new MySQL("127.0.0.1", "3306", "opthortest", "root", "root");

    this.idBoitier = boitierID;

    /* Récupération du port correspondants au boitier*/    port int.Parse(maConnexion2.execute_select_unique("SELECT port FROM device WHERE id_device " + boitierID));    MySqlDataReader monReader maConnexion2.execute_select_multi("SELECT id_bus_affect as 'bus', id_campaign_affect as 'campagne' FROM affect_device WHERE id_device_affect " + idBoitier + " AND '" + DateTime.Today.ToString("yyyy-MM-dd") + "' BETWEEN start_date AND end_date");

    if (monReader.Read())
    {
    idBus = monReader.GetInt32("bus");
    idCampagne = monReader.GetInt32("campagne");
    }
    monReader.Close();
    idReseau int.Parse(maConnexion2.execute_select_unique("SELECT id_network_campaign FROM campaign WHERE id_campaign " + idCampagne));

    /* Récupération des noms correspondants aux Identifiants */    nomBoitier maConnexion2.execute_select_unique("SELECT name FROM device WHERE id_device " + idBoitier);    nomCampagne maConnexion2.execute_select_unique("SELECT name FROM campaign WHERE id_campaign " + idCampagne);    nomBus maConnexion2.execute_select_unique("SELECT name FROM bus WHERE id_bus " + idBus);    nomReseau maConnexion2.execute_select_unique("SELECT name FROM network WHERE id_network " + idReseau);
    maConnexion2.close();
    }

    /* ***********************************************************
    * METHODES
    * ********************************************************* */

    /* Retourne l'ID du Boitier */
    public int get_idBoitier()
    {
    return idBoitier;
    }

    /* Retourne le numéro de port */
    public int get_port()
    {
    return port;
    }

    /* Retourne l'ID du Bus */
    public int get_idBus()
    {
    return idBus;
    }

    /* Retourne l'ID du Réseau */
    public int get_idReseau()
    {
    return idReseau;
    }

    /* Retourne l'ID de la Campagne */
    public int get_idCampagne()
    {
    return idCampagne;
    }

    /* Retourne le nom de la Campagne */
    public string get_NomCampagne()
    {
    return nomCampagne;
    }

    /* Retourne le nom du Réseau */
    public string get_NomReseau()
    {
    return nomReseau;
    }

    /* Retourne le nom du Bus */
    public string get_NomBus()
    {
    return nomBus;
    }

    /* Retourne le nom du Boitier */
    public string get_NomBoitier()
    {
    return nomBoitier;
    }
    }
    }

Fichier 4 : TCPConnexion.cs :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net.Sockets;
    using System.Windows.Forms;
    using System.Threading;

    namespace GPRSListener
    {
    public class TCPConnexion
    {
    private TcpListener monListener = null;
    private TcpClient monClient = null;
    private int portTCP;
    private NetworkStream ns;
    private Thread monThread = null;
    private byte[] data;
    private int recv;

    public TCPConnexion(int port)
    {
    this.portTCP = port;
    this.monListener = new TcpListener(portTCP);
    this.monListener.Start();

    // Acceptation d'une nouvelle connexion
    this.monClient = this.monListener.AcceptTcpClient();
    ns = this.monClient.GetStream();

    //lancement de l'écoute
    this.ecouter();
    }

    private void ecouter()
    {
    try
    {
    if (monClient.Connected)
    {
    // Création et lancement d'un nouveau Thread
    monThread = new Thread(recupData);
    monThread.Start();
    }
    else
    {
    MessageBox.Show("Erreur de connexion : port : " + portTCP);
    }
    }
    catch (SocketException ex)
    {
    MessageBox.Show("Erreur TCPConnexion Port : " + portTCP + " : " + ex.ToString());
    }
    }

    private void recupData()
    {
    while (true)
    {
    data = new byte[1024];
    recv = ns.Read(data, 0, data.Length);

    if (recv == 0)
    {
    break;
    }
    else
    {
    string resultat = "";
    for (int i = 0; i < recv; i++)
    {
    if (data[i] == 13)
    {
     Program.monFormulaire.lb_log.BeginInvoke(new GPRSListener.Principale.affichageLog(Program.monFormulaire.log), new object[] { resultat });
    resultat = "";
    }
    else
    {
    resultat = resultat + Encoding.ASCII.GetString(data, i, 1);
    }
    }
    }
    ns.Write(data, 0, recv);
    }
    }

    public void Stop()
    {
    if (monListener != null)
    {
    monListener.Stop();
    }

    if (monThread != null)
    {
    monThread.Abort();
    }
    }
    }
    }

Le problème vient peut être du Thread ou de delegate, mais je n'arrives pas à résoudre cette erreur

Merci de me venir en aide ...

Merci d'avance
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
29
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
5 décembre 2009
1
3
Merci
C bon cété le delegate qui n'été pas déclaré dans le bon fichier. Merci

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de skyline86
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
30
0
Merci
Salut

Tu as regardé quel objet était null dans ton instruction ?
(Lorsqu'une exception est levée en mode Debug sous visual studio, ça fait automatiquement un point d'arrêt, donc tu peux mettre ta souris sur chaque objet dans ton code pour voir sa valeur, ses propriétés...)

Krimog :
while (!succeed = try()) ;
Commenter la réponse de krimog
Messages postés
29
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
5 décembre 2009
1
0
Merci
Bas en faite la valeur NULL si j'ai bien débuggé est monFormulaire dans le dernier fichier et je ne comprend pas pourquoi il ne veut plus accéder a cette variable.

Pourriez vous m'aider SVP....

Cordialement
Commenter la réponse de skyline86
Messages postés
29
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
5 décembre 2009
1
0
Merci
Je sais pas trop car j'ai également affichageLog le delegate
Commenter la réponse de skyline86