Faire un compte à rebours en Java
-
Compte à rebours en Java à l’aide de
ScheduledExecutorService
-
Compte à rebours en Java à l’aide de
Timer
etTimerTask
Aujourd’hui, nous allons vous montrer comment créer un compte à rebours en Java à l’aide de deux méthodes sans dépendre d’une bibliothèque tierce. Nous pouvons soit utiliser le minuteur dans une fenêtre graphique, soit la console juste pour le tester. Découvrez les codes que nous avons ci-dessous!
Compte à rebours en Java à l’aide de ScheduledExecutorService
Dans cette première méthode, nous utilisons l’interface ExecutorService
pour appeler sa méthode newScheduledThreadPool()
, qui crée un pool de threads qui utilise le même nombre fixe de threads affectés. Dans la méthode newScheduledThreadPool()
, on passe le nombre de threads que l’on veut dans le pool. Dans ce cas, nous voulons qu’un seul thread exécute le minuteur.
La fonction Executors.newScheduledThreadPool()
renvoie un objet ScheduledExecutorService
que nous avons nommé scheduler
. Ensuite, nous surchargeons la méthode run()
de l’interface Runnable
. Une instance Runnable
est utilisée pour exécuter le thread. Dans Runnable
, nous créons une variable countdownStarter
et l’initialisons avec le nombre en secondes à partir duquel nous voulons démarrer le compte à rebours.
Maintenant, à l’intérieur de la méthode run()
, nous affichons countdownStarter
, et diminuons sa valeur d’un. Pour arrêter le timer lorsqu’il atteint zéro, nous créons une condition pour vérifier la valeur countdownStarter
. Si sa valeur devient inférieure à zéro, il imprime un message et arrête le scheduler
, qui est le service d’exécution à l’aide de la commande scheduler.shutdown()
.
Enfin, nous utilisons l’objet scheduler
pour appeler la méthode scheduleAtFixedRate()
qui exécute l’action donnée périodiquement et prend quatre arguments. Le premier argument est l’instance runnable
; le second est le délai de la première exécution ; le troisième est le délai entre les actions. Ici, nous avons donné un délai qui devrait être égal à une seconde, comme le suggère le quatrième argument.
import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.concurrent.*;
public class Countdown {
public static void main(String[] args) {
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
final Runnable runnable = new Runnable() {
int countdownStarter = 20;
public void run() {
System.out.println(countdownStarter);
countdownStarter--;
if (countdownStarter < 0) {
System.out.println("Timer Over!");
scheduler.shutdown();
}
}
};
scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);
}
}
Production:
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Timer Over!
Compte à rebours en Java à l’aide de Timer
et TimerTask
Dans cet exemple, nous utilisons deux classes, Timer
et TimerTask
, fournies avec le package java.util
. Les deux classes sont utilisées pour planifier les tâches à exécuter dans le thread d’arrière-plan. Pour cet exemple, nous utilisons l’objet jFrame
pour afficher le timer dans une fenêtre GUI. Tout d’abord, nous créons un objet jFrame
, puis un jLabel
qui affiche le texte du timer. Nous définissons la disposition du cadre comme FlowLayout()
et définissons la position et la taille de la fenêtre.
Ensuite, nous ajoutons le jLabel
au cadre. Pour créer le compte à rebours, nous créons un objet Timer
et appelons sa méthode scheduleAtFixedRate()
, qui planifie et répète la tâche spécifiée à un taux fixe, comme son nom l’indique.
Maintenant, comme le partenaire scheduleAtFixedRate()
prend un objet TimerTask
comme premier argument, nous créons un objet en utilisant new TimerTask()
. Pour les deuxième et troisième arguments, ils planifient la tâche à exécuter et la période en millisecondes entre chaque exécution.
Pour l’étape suivante, nous devons créer une variable et l’initialiser avec le nombre avec lequel nous voulons commencer le compte à rebours. Ensuite, nous appelons la méthode run()
et définissons le texte du composant jLabel
comme i
. Pour arrêter le timer, nous appelons timer.cancel()
.
import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;
public class Countdown {
public static void main(String[] args) {
JFrame jframe = new JFrame();
JLabel jLabel = new JLabel();
jframe.setLayout(new FlowLayout());
jframe.setBounds(500, 300, 400, 100);
jframe.add(jLabel);
jframe.setVisible(true);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
int i = 20;
public void run() {
jLabel.setText("Time left: " + i);
i--;
if (i < 0) {
timer.cancel();
jLabel.setText("Time Over");
}
}
}, 0, 1000);
}
}
Production:
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn