J ARRIVE PAS TROUVER L ERREUR [Résolu/Fermé]

Signaler
Messages postés
73
Date d'inscription
jeudi 30 août 2012
Statut
Membre
Dernière intervention
27 février 2014
-
Messages postés
73
Date d'inscription
jeudi 30 août 2012
Statut
Membre
Dernière intervention
27 février 2014
-
BONJOUR TOUT LE MONDE!!
svp, j arrive pas a trouver l erreur dans les 2 lignes en bas que j ai precise!!merci de m aider!!
public class Ballon {
public String nom;
public int x;
public Ballon(String n,int a){
nom=n;
x=a;
}
public String toString(){return("<"+nom+">x="+x);}
public void deplacer(int o){x=x+o;}
class Joueur extends Thread {
public Ballon monBallon;
public int offset ;
public int periode;
public String nom;
public Joueur(Ballon b,int o,int p,String n)
{
monBallon=b;
offset=o;
periode=p;
nom=n;
}
public String toString()
{
return("{+nom+}"+offset+""+periode);
}
public void run(){
while(true) monBallon.prendre_donner(this);
}
}
public synchronized void prendre_donner(Joueur j){
/*System.out.println(j+"demende le ballon"+this);
this.wait();*/
System.out.println(j+"possed le ballon");
deplacer(j.offset);
j.sleep(j.periode*1000);
this.notify();
System.out.println(j+"lachele ballon");
deplacer(j.offset);
j.sleep(j.periode*1000);
this.notify();
System.out.println(j+"ballon"+this);
}
/*public synchronised void donner(){
* System.out.println("ballon"+this+"donne");
* this.notify();
* }
*/

}
public class test {
public static void main(String args[]){
Ballon a=new Ballon("adidas",0);



//VOILA LES 2 LIGNES OU JE CHECHE L ERREUR//
Joueur gauche=new Joueur(a,7,7,"zidane");
Joueur droite=new Joueur(a,5,5,"ronaldo");



gauche.start();
droite.start();
Thread.sleep(5*1000);
//aa.donner();
}
}

2 réponses

Messages postés
16362
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 juin 2021
2 844
La classe Joueur est définie À L'INTÉRIEUR de la classe Ballon, elle est donc attachée aux objets de cette classe. Donc deux solutions :

1) Tu déclares la classe Joueur en dehors de la classe Ballon (conseillé ici)
2) Tu crées tes joueurs en utilisant l'objet Ballon 'a' comme ceci :

Ballon.Joueur gauche = a.new Joueur(a,7,7,"zidane");
Ballon.Joueur droite = a.new Joueur(a,5,5,"ronaldo");

Remarque : dans ce cas, le paramètre 'a' dans le constructeur est inutile, ainsi que l'attribut monBallon, car tu peux utiliser directement Ballon.this

Exemple :

public void run()
{
    while(true)
        Ballon.this.prendre_donner(this);
}

Autre remarque : dans prendre_donner, la méthode sleep est static, elle ne devrait pas être appelée avec le nom d'un objet mais directement avec le nom de la classe. De plus elle peut provoquer une InterruptedException qu'il faut gérer :

try 
{ 
    Thread.sleep(j.periode*1000); 
} 
catch (InterruptedException e) { }
La confiance n'exclut pas le contrôle
Messages postés
73
Date d'inscription
jeudi 30 août 2012
Statut
Membre
Dernière intervention
27 février 2014
1
merciiiiiiiiiiii!!!