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

Java Discussion :

Compte à rebours en Java


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Compte à rebours en Java
    Salut à tous. J'ai besoin d'aide.

    J'ai besoin de créer un compte à rebours, sauf que je galére un peu.

    On m'as renvoyé sur Timertask et Schedule, mais j'ai un peu de mal à comprendre leur fonctionnement, et je n'arrive à rien.

    Je ne demande pas à ce qu'on me code un compte à rebours, quoique, mais plutôt qu'on puisse me donner une sorte de marche à suivre pour coder tout cela.

    Je remercie d'avance ceux qui veulent bien m'aider.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    novembre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : novembre 2015
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Il y a des fonctions que tu peux importer pour le faire. C’est une sorte de «*time sleep*» pour stopper le programme pendant un temps donné.

    Ce forum pourrait peut-être t’aider:
    https://stackoverflow.com/questions/...-delay-in-java

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 677
    Points : 22 488
    Points
    22 488
    Billets dans le blog
    50
    Par défaut
    Principe du compte a rebours :
    1. partir d'un nombre positif ou 0 -> ton 1er paramètre.
    2. on attend x <unité de temps> -> un autre paramètre ou une valeur fixée en dur pour commencer. Pour attendre il faut dormir, donc on va invoquer sleep();
    3. décrémenter de 1
    4. si on arrive a 0 on arrête de boucler sinon recommencer en 2.


    Première analyse : y a une boucle.

    Seconde analyse : si possible on va tenter d'eviter de bloquer le thread principal -> on va tenter de lancer un autre thread.

    Mais bon on va commencer directos pour faire simple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void main(String[] args) throws InterruptedException {
        final int max = 5;    // Paramètre #1
        final long sleepTime = 1000; // Paramètre #2
        int value = max;
        while (value > 0) { // Boucle et condition d’arrêt.
            sleep(sleepTime); // On dort !
            value --;  // On décrémente.
        }
    }


    C'est pas bien dur !
    La gestion de l'exception est la car la méthode sleep() peut être interrompue.

    L'ennuie c'est que ce code monopolise le thread principal et donc qu'on peut rien faire d'autre pendant qu'il tourne. Donc on va utiliser un autre thread pour le lancer.

    Commençons par une implémentation simple :

    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
    public void main(String[] args)  {
        final Thread t = new Thread() {
             @Override
             public void run() { 
                 try {
                    final int max = 5;
                    final long sleepTime = 1000;
                    int value = max;
                    while (value > 0) {
                        sleep(sleepTime);
                        value --; 
                    }
                 } catch (InterruptedException ex) {
                     ex.printStackTrace();
                 }
           }
        };
        t.start();
    }


    Ou encore via un Runnable comme ça on détache le code exécutable du thread.


    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
    public void main(String[] args)  {
        final Thread t = new Thread(new Runnable() {
             @Override
             public void run() { 
                 try {
                    final int max = 5;
                    final long sleepTime = 1000;
                    int value = max;
                    while (value > 0) {
                        sleep(sleepTime);
                        value --; 
                    }
                 } catch (InterruptedException ex) {
                     ex.printStackTrace();
                 }
           }
        });
        t.start();
    }
    ou en JDK 8+

    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 void main(String[] args)  {
        final Thread t = new Thread(() -> {
            try {
                final int max = 5;
                final long sleepTime = 1000;
                int value = max;
                while (value > 0) {
                    sleep(sleepTime);
                    value --; 
                }
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        };
        t.start();
    }


    Après, il existe d'autres moyen de plus haut niveau de créer des threads détachés donc par exemple TimerTask (qui herite de Runnable) et Timer qui permet de spécifier la période d’exécution (voir la doc) histoire de ne pas avoir a coder ça a mano. Bref c'est pas bien dur de savoir comment coder la chose, la seule difference c'est qu'ici tu ne feras pas la boucle toi-même, c'est le timer qui la fera pour toi donc tu as juste besoin de coder la décrémentation.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Deux petites question

    1) A quoi sert "Throws InterruptedException" ?

    2) Est-ce que je dois importer quelque chose ? Car sur la ligne "sleep(sleepTime)", il me dit ne pas trouver la variable "sleep"

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    novembre 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : novembre 2015
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Stalkyce Voir le message
    Deux petites question

    1) A quoi sert "Throws InterruptedException" ?

    2) Est-ce que je dois importer quelque chose ? Car sur la ligne "sleep(sleepTime)", il me dit ne pas trouver la variable "sleep"

    Ayant peu de connaissances en Java, je vais essayer de répondre à la deuxième question. "sleep()" est une fonction. Ta variable est "sleepTime". As-tu déclaré cette variable au début de ton programme ? S'il faut faire un "import", ton IDE devrait te le signaler. Sauf si tu codes avec autre chose qu'Eclipse.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 677
    Points : 22 488
    Points
    22 488
    Billets dans le blog
    50
    Par défaut
    Pour être précis ça devrait être Thread.sleep() qui endort le thread courant mais comme j'ai tapé ça vite j'ai oublié de le mettre.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. [timer] Compte à rebours pour redirection !
    Par Raideman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2005, 21h07
  2. Compte à rebours
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/12/2005, 21h12
  3. compte à rebours
    Par Datord dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 17/11/2005, 22h22
  4. compte à rebours
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 27/10/2005, 16h20
  5. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 21h57

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