IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Concurrence et multi-thread Java Discussion :

Timer, thread et aquarium


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut Timer, thread et aquarium
    Bonsoir,
    Je ne sais pas si mon message est au bon endroit, si ce n'est pas le cas toutes mes excuses.
    Je suis (encore et toujours) en train de développer pour un projet tutauré une petite application java : un aquarium.
    Les explications qu'on nous a fournies ne sont pas claires et j'ai vraiment besoin qu'on m'éclaire sur un point.

    Une classe Start lance une Animation qui crée un Aquarium dans lequel se baladent des petits poissons, algues et autres objets. Pour faire bouger tout ce petit monde nous avons eu comme piste ou consigne de créer une classe Time, héritant de Thread. Elle comporte un attribut Aquarium. Le constructeur de Time doit avoir un paramètre Aquarium.
    Il reste à ajouter un attribut Time et à le démarrer (méthode start()) à la construction de l'aquarium).

    Je n'ai déjà pas très bien compris le principe du timer et du thread, alors je ne sais pas quoi mettre dans le constructeur de Time et encore moins comment arranger tout ça.
    J'ai fait des tests, mais eclipse n'est pas d'accord avec ce que j'ai fait. Si une âme charitable voulait bien au moins m'orienter vers le bon chemin je lui en serait très reconnaissante!


    Voici ma classe Time :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Time extends Thread {
     
    	public Aquarium aquarium = new Aquarium();
     
    	public Time(Aquarium aqua){
    	aquarium = aqua;	
    	}
     
    	public void run(){
     
    		while(true)
    			aquarium.go();
    	}
    }
    Et une partie de la classe Aquarium:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Aquarium extends JPanel{
     
    	private static final long serialVersionUID = 1L;
    	public static final int NB_STONE = 5;
    	public static final int NB_SEAWEED = 7;
    	public static final int NB_FISH = 10;
    	private Time t = new Time(this);
     
    	protected Vector<AquariumItem> items = new Vector<AquariumItem>();
     
    	public Aquarium(){   
     
    	this.setBackground(Color.cyan);
    	this.fill();
    	t.start();
    	}
    Et voilà ce que donne l'éxécution: (je ne comprend RIEN)

    Exception in thread "main" java.lang.StackOverflowError
    at sun.reflect.misc.Trampoline.invoke(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
    at javax.swing.UIDefaults.getUI(Unknown Source)
    at javax.swing.UIManager.getUI(Unknown Source)
    at javax.swing.JPanel.updateUI(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    ...
    at Aquarium.<init>(Aquarium.java:33)
    at Time.<init>(Time.java:4)
    at Aquarium.<init>(Aquarium.java:28)
    at Time.<init>(Time.java:4)
    etc...

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    dans ta classe Time tu fais un new Aquarium(). Dans ton aquarium, tu fais un new Time(). Avec ceci (comme on le vois dans le stacktrace), tu tourne en récursion infinie (time instancie aquarium qui instancie time qui ...)


    Retire ce new Aquarium de ton Time.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Ohhh....
    Ca a l'air de marcher !
    Je voyais bien que le problème venait de quelque chose comme ça. Mais je ne suis que débutante en java et et j'ai du mal avec les pointeurs, alors quand on me demande de mettre un attribut Aquarium je vois pas la diffférence entre
    un private Aquarium a et un private Aquarium a = new Aquarium()
    Enfin, merci , merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème timer thread et swt
    Par kitue dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 07/06/2008, 12h22
  2. [timer & thread] timeout & socket non bloquant
    Par untipy dans le forum Réseau
    Réponses: 33
    Dernier message: 22/08/2007, 08h37
  3. Timer,Thread et barre d outil
    Par jhdscript dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/11/2006, 12h20
  4. Réponses: 1
    Dernier message: 09/08/2006, 16h04
  5. [Info]Sequenceur fiable: Timers, Threads
    Par vienin dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 15/07/2005, 00h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo