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

Collection et Stream Java Discussion :

Comment faire repartir un timer en Java ?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut Comment faire repartir un timer en Java ?
    Bonjour j'ai une question concernant les timers en Java
    Je suis en train de faire un application qui simule la circulation de voitures et de feux de circulation.

    Code:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
      ActionListener a = new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
     
                    for (Voiture car : cars3)
                    {
                        car.tournerEst();
                        repaint();
                        timer3.start();
     
                        if (car.getPosY() == feuTrois.getPositionY() &&
                            feuTrois
                                .getCouleur().equals(Color.green))
                        {
                            timer3.start();
                        }
     
                        if (car.getPosY() == feuTrois.getPositionY() && feuTrois
                            .getCouleur().equals(Color.red))
                        {
                            timer3.stop();
                        }
                    }
                }
     
            };
            timer3 = new Timer(50, a);
            timer3.start();
    La voiture qui est en mouvement s'arrête bien au feu rouge, je fais timer3.stop, mais j'aimerais qu'une fois la lumière passée au vert, la voiture se remette en mouvement. J'ai reparti le timer avec un autre timer.start, mais ça ne fonctionne pas. Aussi, j'ai essayé de recréer un autre timer, mais ça ne fonctionne pas non plus, la voiture ne repars pas. Comment repart-on un timer?

    Merci de me répondre!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le problème est qu'il faudrait un timer par voiture, et non un timer pour toutes les voitures. Avec un seul timer, toutes les voitures se comportent comme la dernière traitée dans la boucle.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut
    En passant, j'ai un timer par voiture. Dans mon exemple c'est pour une voiture seulement. Il y a une seule dans ma liste. Apres le repaint tu peux enlever le tiner.start pour que ce soit plus clair. Mais les deux conditions restent telle quelle.

    Merci.

    PS : Oh et un else après le premier if avec un timer.start aurait suffit. C'est simplement que j'étais découragéet dans ce temps -là on code des niaiseries.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Quand je disais un timer par voiture, je voulais dire aussi, un actionlistener associé qui ne traite qu'une voiture... Peut-être que tu as une instance de timer différente par voiture, mais la boucle qui exécutée dans le timer traite les trois voitures...

    Oui, un seul timer.start(), celui dans le if, est suffisant... mais ce n'est pas le fait de dupliquer cet appel qui explique pourquoi la voiture ne redémarre pas après un stop. Il n'y a aucun raison que le timer ne reparte pas si tu fais timer.start().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut Code remnanié
    Ça ça nefonctionne pas...la voiture s'arrête mais ne redémarre pas

    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
    17
    18
    19
    20
    21
    22
    23
    ActionListener a = new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                        car3.tournerEst();
                        repaint();
                        if (car.getPosY() == feuTrois.getPositionY() &&
                            feuTrois
                                .getCouleur().equals(Color.red))
                        {
                            timer3.stop();
                        }
     
                       else
                        {
                            timer3.start();
                        }
                    }
                }
     
            };
            timer3 = new Timer(50, a);
            timer3.start();

  6. #6
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut
    Excuse-moi je viens de modifier le post précédent. J'avais omis quelques détails dans le code. Bref, la voiture part, puis elle s'arrête lorsqu'elle est au feu rouge et que la lumière est rouge. Mais ensuite jamais on ne rentre dans le else. est-ce que c'est parce que le thread est tué? Je veux dire j'ai essayer d'en recréer un nouveau dans cette optique,mais ça ne fonctionne pas plus, la voiture ne redémarre pas. J'ai même essayer de mettre la voiture dans le timer des feux, mais ce n'est pas du tout logique. Voilà, merci beaucoup pour votre aide!

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Le problème c'est que quand la voiture arrive au feu rouge, le timer s'arrête (pas le thread, mais seulement l'invocation de l'action, et c'est pour ça qu'on peut redémarrer le timer) et quand le feu repasse au vert, le timer étant arrêté il ne peut pas détecté que le feu est passé au vert.
    Soit c'est ton timer de feu qui va redémarrer le timer de voiture, ce qui n'est pas terrible, parce que ça impose un lien qui n'est pas logique (le feu doit connaître toutes les voitures qui sont en attente sur lui).
    Soit, tu as un timer qui s'occupe de déplacer ton véhicule, et un timer qui représente en quelque sorte le conducteur, et qui va démarrer ou arrêter le timer selon. Mais ça oblige à avoir un second timer qui passe son temps à tester l'état du feu. D'ailleurs, il pourrait aussi gérer l'arrêt.

    Autre solution, meilleure de mon point de vue, mais qui fait intervenir une autre notion, le pattern observer/observable, ou un système évenementiel : lors de l'arrêt du véhicule, on enregistre un écouteur sur le feu, et lorsque l'écouteur reçoit le signal de passage au vert, on redémarre le timer.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [Audio] Comment faire du DSP audio en JAVA
    Par HNoury dans le forum Multimédia
    Réponses: 3
    Dernier message: 01/01/2010, 22h50
  2. comment faire de l'ajax avec java
    Par ichigoo dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 04/03/2009, 11h51
  3. Réponses: 1
    Dernier message: 18/11/2008, 09h24
  4. comment faire appel d'une application java dans un script shell?
    Par moradbe dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 01/02/2007, 19h55
  5. Comment faire un "tail -f" en Java
    Par Grand sorcier dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 13/11/2006, 13h17

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