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

Résolu
haddreezy Messages postés 40 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 8 août 2012 - 23 mai 2012 à 12:25
haddreezy Messages postés 40 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 8 août 2012 - 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
A voir également:

6 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
23 mai 2012 à 15:10
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é. -
5