Problème lors d'utilisation de thread

cs_maymouta Messages postés 12 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 27 mai 2011 - 3 mars 2010 à 10:06
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 3 mars 2010 à 12:04
bonjour à tout le monde,
j'ai un problème lors d'utilisation de thread, voici un exemple de mon code:
public class Agent {
//déclaration de mes variables
Agent(){}// mon constructeur
......

public double[] distanceminimale(){
// cette méthode me permet de calculer une distance minimale entre plusieurs mesures de distances. je l'ai testée et elle fonctionne bien
}
public double[] coordonnes (double distance, double angle){
// cette méthode de permet de calculer les coordonnées d'un point dont je connait sa distance par rapport à un point donnée et l'angle entre ces deux point, aussi je l'ai testée et elle fonctionne bien
}
public double[] coordonnes1 (double décalage, double distance, double angle){
// cette méthode me permet de calculer les coordonnées de ce point mais en changeant le repère (le repère initial + un décalage de temps, je l'ai testée est elle fonctionne bien
}

mon problème est comme suit :je veux à t=0 calculer les coordonnée de ce point càd utiliser la méthode public double[] coordonnes (double distance, double angle), puis mettre le programme en attente jusqu'à t=1 (càd après un décalage de temsp) je veux recalculer les coordonnées de ce point mais en utilisant la deuxième méthode public double[] coordonnes1 (double décalage, double distance, double angle) puis poursuivre l'exécution de la suite de programme, pour ce faire je pense d'utiliser la notion de thread qui exécute la première méthode puis il se met en attente jusqu'à le décalage de temps puis poursuit l'exécution de la méthode deux puis il se me en état de mort pour sortir de thread et poursuivre l'exécution de suite de programme, je ne maitrise pas bien les thread, même j'ai essayée de les intégrés dans le programme, mais un erreur se produit : java.lang.NullPointerException
j'ai rien comprit
merci infiniment pour l'aide.

3 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
3 mars 2010 à 10:36
Salut,

NullPointer ok, mais si tu nous montre pas ton code, on pourra pas te dire d'où cà vient...

Tu as essayer de mettre un point d'arrêt à la ligne qui déclenche l'exception pour voir quelle variable est nulle à ce moment là ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_maymouta Messages postés 12 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 27 mai 2011
3 mars 2010 à 11:50
public calss agent extends Agent{
private double xb= 8.0,zb=0.0,yb=0.0;
private double tv=0.5;
private final static double decal=0.2;
public double distancemin0[]=new double [6];
public double distancemin1[]=new double[6];
public static int nombre=1;
public agent(Vector3d pos, String name) {
super(pos, name);
}
public double[] controller(){
double t=this.getLifeTime();
threadTest test =new threadTest();
test.start();
this.angle();// cette méthode utilise les deux tableaux coord[] et coord1[] (calculer dans le thread) qui contient les coordonnées du pointà t=0 puis à t=1
this.acceleration;
}
public void acceleration (double distmin0, double angle0, double distmin1,double angle1){
double c0[]=new double[2];double c1[]=new double [2];
c0=coord;
c2=coord2;
double distance =this.distance(c0[0], c0[1], c1[0], c1[1]);
double v= distance/decal;
if v==0 {
this.setvelocity(0)
}
else {
if (this.getTranslationalVelocity()<v){
this.setTranslationalVelocity(tv);
}
else{
this.setTranslationalVelocity(v);
}
}



}

public double[] distanceminimale(){


double S[]=new double[2]; double RS[]=new double [2]; int i3=0;

for (int j=5;j<=6;j++){// les capteurs qui contrôlent la zone sont S5, S6
S[i3]=sonars.getMeasurement(j);
RS[i3]=sonars.getSensorAngle(j);
i3++;
}

MD=this.min(S, RS, 2);


double distancemin[]=new double [2];//
distancemin[0]= MD[0];// distancemin[0] contient la distance min
distancemin[1]=MD[1];//distancemin[1] continent l'angle entre le capteur qui détecte la distance min et l'agent

return distancemin;/**c'est un tableau qui contient les distances min et l'angle
}
public double [] min(double a[], double b[], int l){
double tab[]=new double[2];
double min=a[0], range = b[0];
for (int j=1;j<l;j++){
if (a[j]<min){
min=a[j];
range=b[j];
}
}
tab[0]=min; tab[1]=range;
return tab;

}
double distance (double xa, double ya, double xb, double yb){
double dx, dy;
dx = xa-xb;
dy=ya-yb;
return java.lang.Math.sqrt(dx*dx+dy*dy);
}
public double[] coordonnes (double distance, double angle){

double xr0=0.0;
double zr0=0.0;
double xb0=distance;
double zb0=0.0;
double coor[]=new double[2];


coor[0]=(xr0+(xb0-xr0)*Math.cos(angle)-(zb0-zr0)*Math.sin(angle));
coor[1]=(zr0+(zb0-zr0)*Math.cos(angle)+(xb0-xr0)*Math.sin(angle));


return coor;


}
public double[] coordonnes1 (double time, double distance, double angle){

double xr1=this.Velocity()*time;
double zr1=0.0;
double xb1=distance;
double zb1=0.0;
double coor[]=new double[2];


coor[0]=(xr1+(xb1-xr1)*Math.cos(angle)-(zb1-zr1)*Math.sin(angle));
coor[1]=(zr1+(zb1-zr1)*Math.cos(angle)+(xb1-xr1)*Math.sin(angle));


return coor;

}

public class threadTest extends Thread {
double coord[]=new double[2];double coord1[]=new double[2];

Agent A; Thread l;
threadTest(){
//this.l=n;
}

public void run(){
if(Agent.nombre%2==0){
A.distancemin0=A.distanceminimale(); Agent.nombre++;// on utilise une variable statique nombre pour donner à chaque fois la possibilité d'exécuter à t=0 le premier calcule de coordonnées et à t=0 pour calculer les coordonnées à t=1

coord=this.coordonnes(distancemin0[0], distancemin0[1]);
}
else{
A.distancemin1= A.distanceminimale(); Agent.nombre++;
coord1 =this.coordonnes1(decal,distancemin1[0], distancemin1[1]);
}
try{ sleep(100);}
catch (InterruptedException e) {}


}

}
c'est le code ainsi la ligne de l'exception en gras
merci d'avance
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
3 mars 2010 à 12:04
Salut,

Aïe, tu ne respecte pas les standards de java, ce qui rend ton code assez difficile à lire !

C'est ta variable a (pas de majuscule pour le nom des variables) dans ta classe ThreadTest (une majuscule aux noms de classe) qui n'est jamais instanciée.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0