J ARRIVE PAS TROUVER L ERREUR

Résolu/Fermé
eleveing Messages postés 73 Date d'inscription jeudi 30 août 2012 Statut Membre Dernière intervention 27 février 2014 - 8 janv. 2013 à 00:14
eleveing Messages postés 73 Date d'inscription jeudi 30 août 2012 Statut Membre Dernière intervention 27 février 2014 - 19 janv. 2013 à 02:58
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

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 8/01/2013 à 09:23
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
0
eleveing Messages postés 73 Date d'inscription jeudi 30 août 2012 Statut Membre Dernière intervention 27 février 2014 1
19 janv. 2013 à 02:58
merciiiiiiiiiiii!!!
0