Crea un conto alla rovescia in Java
-
Conto alla rovescia in Java utilizzando
ScheduledExecutorService
-
Conto alla rovescia in Java utilizzando
Timer
eTimerTask
![Crea un conto alla rovescia in Java](/img/Java/feature-image---countdown-timer-java.webp)
Oggi dimostreremo come creare un conto alla rovescia in Java utilizzando due metodi senza fare affidamento su librerie di terze parti. Possiamo utilizzare il timer in una finestra della GUI o la console solo per testarlo. Dai un’occhiata ai codici che abbiamo qui sotto!
Conto alla rovescia in Java utilizzando ScheduledExecutorService
In questo primo metodo, utilizziamo l’interfaccia ExecutorService
per chiamare il suo metodo newScheduledThreadPool()
, che crea un pool di thread che utilizza lo stesso numero fisso di thread assegnati. Nel metodo newScheduledThreadPool()
, passiamo il numero di thread che vogliamo nel pool. In questo caso, vogliamo che un solo thread esegua il timer.
La funzione Executors.newScheduledThreadPool()
restituisce un oggetto ScheduledExecutorService
che abbiamo chiamato scheduler
. Successivamente, sovrascriviamo il metodo run()
dall’interfaccia Runnable
. Un’istanza Eseguibile
viene utilizzata per eseguire il thread. In Runnable
, creiamo una variabile countdownStarter
e la inizializziamo con il numero in secondi da cui vogliamo far partire il conto alla rovescia.
Ora all’interno del metodo run()
, stampiamo countdownStarter
e diminuiamo il suo valore di uno. Per fermare il timer quando raggiunge lo zero, creiamo una condizione per controllare il valore countdownStarter
. Se il suo valore diventa inferiore a zero, stampa un messaggio e chiude lo scheduler
, che è il servizio Executor, utilizzando il comando scheduler.shutdown()
.
Infine, usiamo l’oggetto scheduler
per chiamare il metodo scheduleAtFixedRate()
che esegue periodicamente l’azione data e accetta quattro argomenti. Il primo argomento è l’istanza runnable
; il secondo è il ritardo sulla prima esecuzione; il terzo è il ritardo tra le azioni. Qui, abbiamo dato il ritardo come uno che dovrebbe essere uguale a un secondo, come suggerisce il quarto argomento.
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);
}
}
Produzione:
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Timer Over!
Conto alla rovescia in Java utilizzando Timer
e TimerTask
In questo esempio, utilizziamo due classi, Timer
e TimerTask
, fornite con il pacchetto java.util
. Entrambe le classi vengono utilizzate per pianificare le attività per l’esecuzione nel thread in background. Per questo esempio, usiamo l’oggetto jFrame
per mostrare il timer in una finestra GUI. Prima creiamo un oggetto jFrame
, poi un jLabel
che mostra il testo del timer. Impostiamo il layout del frame come FlowLayout()
e impostiamo la posizione e le dimensioni della finestra.
Successivamente, aggiungiamo la jLabel
al frame. Per creare il timer per il conto alla rovescia, creiamo un oggetto Timer
e chiamiamo il suo metodo scheduleAtFixedRate()
, che pianifica e ripete l’attività specificata a una velocità fissa, come suggerisce il nome.
Ora, poiché l’accoppiamento scheduleAtFixedRate()
prende un oggetto TimerTask
come primo argomento, creiamo un oggetto usando new TimerTask()
. Per il secondo e il terzo argomento, pianificano l’attività da eseguire e il periodo in millisecondi tra ogni esecuzione.
Per il passaggio successivo, dobbiamo creare una variabile e inizializzarla con il numero con cui vogliamo iniziare il conto alla rovescia. Quindi, chiamiamo il metodo run()
e impostiamo il testo del componente jLabel
come i
. Per fermare il timer, chiamiamo 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);
}
}
Produzione:
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