La référence d'objet n'est pas définie à une instance d'un objet [Résolu]

haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 23 mai 2012 à 12:25 - Dernière réponse : haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention
- 23 mai 2012 à 16:58
Bonjour,

j'ai écrit un programme en c# pour un projet, il a l'air de correctement fonctionner mais j'ai toujours la même phrase à la fin dans ma fenêtre console "la référence d'objet n'est pas définie à une instance d'un objet". Pourtant je n'ai aucune erreur de détecter. Pouvez me dire comment faire pour me débarrasser de cette phrase, surtout si aucune erreur ne lui correspond? Je vous montre mon code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Text.RegularExpressions;
using System.Collections;
using System.IO;






namespace Test7
{
class Class1
{
// Fonction qui calcule la distance entre le récepteur et les points d'accès Wifi
public static double CalculDistance(double P)
{
double h;
double k;
double l;
double m;

k = Math.Pow(10, (P / 10) - 3);
l = 1.25 / (4 * Math.PI);
m = 0.1 * 11 * 11;


h = l/(Math.Sqrt(k/m));
return h;

}

/* Fonction qui calcule les coordonnées du récepteur
public static List<double> CalculPosition(double a, double b, double c, double d, double f, double g, double l, double m, double n, double o, double p, double q)
{
List<double> C = new List<double>();
double x, y, z;

// Math.Pow((x - a), 2) + Math.Pow((y - b), 2) + Math.Pow((z - c), 2) = Math.Pow(o, 2);
//Math.Pow((x - d), 2) + Math.Pow((y - f), 2) + Math.Pow((z - g), 2) = Math.Pow(p, 2);
//Math.Pow((x - l), 2) + Math.Pow((y - m), 2) + Math.Pow((z - n), 2) = Math.Pow(q, 2);

// C.Insert(0, x);
// C.Insert(1, y);
//C.Insert(2, z);

return C;
}


*/
















[STAThread]
static void Main(string[] args)
{
try
{

// Création d'une instance de document xml et chargement des données.

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Documents and Settings\8907840K\Mes documents\Visual Studio 2010\Projects\Tets7\Tets7\bin\Debug\Summary.kml");

// 1. Sélectionne tous les noeuds descriptions en utilisant un chemin.

XmlNodeList nodeList = doc.SelectNodes("//Folder/Folder/Placemark/description");
XmlNode node;
Console.WriteLine("{0}", "Acces_Points LIST: ");
Console.WriteLine("{0}", "----------------- ");


// 2. Déclaration des variables

string s1;
TimeSpan ts = TimeSpan.Zero;
StreamWriter monStreamWriter = new StreamWriter(@"C:\Documents and Settings\8907840K\Bureau\Test\test.txt");
double[] array = new double[3];
double[] AP1 = new double[3];
double[] AP2 = new double[3];
double[] AP3 = new double[3];
List<double> Coordonnées = new List<double>();
array[0] = array[1] = array[2] = 0;
double puissance2 = 0;
int i = 0;
int j = 0;
double diff = 0;
double d1, d2, d3;
string lo, la, al;
double lon, lat, alt;




// 3. Extraction des informations recherchées

foreach (XmlNode nd in nodeList)
{

s1 = nd.InnerText;

// Nom des APs

string pattern = @"(?<Nom>([A-Za-z0-9 \-_\[\]]+ \[[0-9A-Z:]+\]))";
Regex searchRegEx = new Regex(pattern);
Match correspondance = searchRegEx.Match(s1);
string nom = correspondance.Groups["Nom"].Value;

// Puissance des APs

string pattern1 = @"(?(\-[0-9]+dBm))";
Regex searchRegEx1 = new Regex(pattern1);
Match correspondance1 = searchRegEx1.Match(s1);
string puissance = correspondance1.Groups["Puissance"].Value;
string puissance1 = puissance.Substring(0, 3);
puissance2 = Convert.ToDouble(puissance1);
//Console.Write(puissance2);
//Console.Write("\n");



// Coordonnées GPS

string pattern2 = @"(?<Coordonnées>([\-]?[0-9]+,[\-]?[0-9]+,[\-]?[0-9]+))";
Regex searchRegEx2 = new Regex(pattern2);
Match correspondance2 = searchRegEx2.Match(s1);
string coordonnées = correspondance2.Groups["Coordonnées"].Value;
string[] position = coordonnées.Split(new Char[] { ',' });
la = position[0];
lo = position[1];
al = position[2];
lon = Convert.ToDouble(lo);
lat = Convert.ToDouble(la);
alt = Convert.ToDouble(al);



//Console.Write("{0}, {1}, {2}", lo, la, al);




// Temps

string pattern3 = @"(?<Temps>([0-9]+:[0-9]+:[0-9]+.[0-9]+Z))";
Regex searchRegEx3 = new Regex(pattern3);
Match correspondance3 = searchRegEx3.Match(s1);
string temps = correspondance3.Groups["Temps"].Value;


// Création échelle de temps

string temps1 = temps.Substring(0, 12);
DateTime h = DateTime.ParseExact(temps1, "HH:mm:ss.fff", null);
TimeSpan h1 = h.TimeOfDay;
if (ts == TimeSpan.Zero)
{

double d = ts.TotalMilliseconds;
// Ecriture dans fichier texte
monStreamWriter.WriteLine(string.Format("{0},{1},{2},{3}", nom, puissance1, coordonnées, d));
array[0] = puissance2;
AP1[0] = lat;
AP1[1] = lon;
AP1[2] = alt;
i = i + 1;






/* Console.Write(d);
Console.Write("\n");*/
ts = h1;


}
else
{

TimeSpan h2 = h1.Subtract(ts);
double e = h2.TotalMilliseconds;


// Ecriture dans fichier texte
monStreamWriter.WriteLine(string.Format("{0},{1},{2},{3}", nom, puissance1, coordonnées, e));
if (i < 3)
{
if (i == 1)
{

array[i] = puissance2;
AP2[0] = lat;
AP2[1] = lon;
AP2[2] = alt;


diff = e;
i = i + 1;
}
else
{
array[i] = puissance2;
AP3[0] = lat;
AP3[1] = lon;
AP3[2] = alt;
diff = e;
i = i + 1;
}

}

if (array[0] != 0 && array[1] != 0 && array[2] != 0)
{
while (j < 1)
{
d1 = CalculDistance(array[0]);
d2 = CalculDistance(array[1]);
d3 = CalculDistance(array[2]);
// Coordonnées = CalculPosition(AP1[0], AP1[1], AP1[2], AP2[0], AP2[1], AP2[2], AP3[0], AP3[1], AP3[2], d1, d2, d3);
j = j + 1;
Console.Write("{0}, {1}, {2}", d1, d2, d3);

}
}

if (i > 2 && diff != e)
{
array[1] = array[2] = 0;
j = 0;
array[0] = puissance2;
AP1[0] = lat;
AP1[1] = lon;
AP1[2] = alt;
AP2 AP3 null;
i = 1;

}

/* Console.Write(e);
Console.Write("\n");*/
}



}


monStreamWriter.Close();




XmlElement root = doc.DocumentElement;
node = root.ChildNodes[1].ChildNodes[1].ChildNodes[1];






}
catch (XmlException xmlEx) // Handle the XML Exceptions here.
{
Console.WriteLine("{0}", xmlEx.Message);
}
catch (Exception ex) // Handle the Generic Exceptions here.
{
Console.WriteLine("{0}", ex.Message);
Console.ReadLine();
}
}
}

}

Merci pour votre aide
Afficher la suite 

Votre réponse

6 réponses

krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 23 mai 2012 à 15:10
0
Merci
Bonjour,

Ce message correspond à une NullReferenceException : Tu accèdes à un membre d'un objet qui est null.

Pour savoir de quel objet il s'agit et à quelle ligne, il faut enlever le
catch (Exception ex)
{

}


Ensuite, sache qu'un try / catch sur l'intégralité d'une méthode, c'est mal. C'est le meilleur moyen d'avoir une méthode qui ne marche pas sans que tu le voies ou un comportement anormal.

Les try / catch sont là pour gérer les exceptions, et doivent être utilisés de manière exceptionnelle.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 23 mai 2012 à 16:50
0
Merci
Comme je le disais, c'est que tu essaies d'accéder à un membre d'un élément qui est null. Autrement dit que ce que tu as avant un "." est null.

Si le problème est à la ligne "node = root.ChildNodes[1].ChildNodes[1].ChildNodes[1];", voici ce qui peut être null :
- root
- ChildNodes[1] (orange)
- ChildNodes[1] (violet)

En mode debug, tu peux sélectionner root, root.ChildNodes[1] ou root.ChildNodes[1].ChildNodes[1], plus faire clic-droit → Add Watch (ajouter un observateur ou quelque chose comme ça en français).
Tu verras ainsi la valeur de ton élément (donc tu verras s'il est null).

Mais plus simplement : est-ce normal que tu ailles à l'indice 1 (alors que le premier indice est 0) ? Est-ce que ça ne devrait pas plutôt être root.ChildNodes[0].ChildNodes[0].ChildNodes[0]; ?

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 23 mai 2012 à 14:49
-1
Merci
Mon problème vient de l'instruction: "catch (Exception ex)", donc de l'objet ex mais je ne sais pas du tout comment résoudre l'erreur, je débute en c#. Quelqu'un pourrait me venir en aide?
Commenter la réponse de haddreezy
haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 23 mai 2012 à 16:21
-1
Merci
Mon problème vient de cette ligne: "node = root.ChildNodes[1].ChildNodes[1].ChildNodes[1]; " l'élément node est défini juste au dessus par "XmlNode node;" . Dois je l'initialiser pour éviter qu'il soit null? Comment faire dans ce cas? Ou celà vient d'autre chose que de l'initilaisation?
Commenter la réponse de haddreezy
haddreezy 40 Messages postés lundi 14 mai 2012Date d'inscription 8 août 2012 Dernière intervention - 23 mai 2012 à 16:58
-1
Merci
C'est bon j'ai réussi à résoudre mon problème. Je pensais en effet que ChildNodes[1] me renverrait au premier enfant du 1er noeud de mon texte, or il renvoie au premier noeud tout court. Du coup c'est ChildNodes[1] qui était nul.
J'ai donc remplacé mon expression par :

XmlElement root = doc.DocumentElement;
XmlNode node1, node2, node3, node4, node5;
node1 = root.ChildNodes[0];
node2 = node1.ChildNodes[1];
node3 = node2.ChildNodes[1];
node4 = node3.ChildNodes[1];
node5 = node4.ChildNodes[3];

Merci encore pour tout.
Commenter la réponse de haddreezy
cs_L0ci 224 Messages postés vendredi 26 novembre 2010Date d'inscription 11 juin 2013 Dernière intervention - 23 mai 2012 à 12:31
-2
Merci
Bonjour,

alors je n'ai pas lu tout le code mais, cette erreur signifie que le code essaie d'utiliser un objet/variable/... qui n'ai pas été instancié.
Le mieux serait de faire un pas à pas sur l’exécution pour connaitre la ligne qui génère l'erreur.
Commenter la réponse de cs_L0ci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.