Timer en Java Netbeans Ejemplos y forma de usar

Ejemplos con Timer en java

Al programar es posible que nos veamos con la necesidad de realizar una tarea cada cierto tiempo. Por ejemplo, si queremos pintar un reloj en pantalla, cada segundo debemos mover o repintar el segundero. Quizás deseemos ver cuándo se crea un fichero, con lo que podemos, por ejemplo, cada diez segundos ver si existe. En fin, hay un montón de posibles aplicaciones en las que podemos necesitar realizar tareas periódicamente.

Java nos proporciona dos clases distintas que nos ayudan a esta tarea. Son las clases javax.swing.Timer y java.util.Timer. A ambas clases les decimos cada cuánto queremos el aviso (por ejemplo, un aviso cada segundo en el caso del reloj) y ellas se encargan de llamar a un método que nosotros hayamos implementado. El resultado es que ese método (el que pinta el segundero en la pantalla), se llamará cada cierto tiempo (una vez por segundo en el caso del reloj).

javax.swing.Timer

Esta clase es más sencilla de usar.  Basta con instanciarla pasándole cada cuánto tiempo (en milisegundos) queremos que nos avise y un ActionListener, cuyo método actionPerformed() se ejecutará periódicamente. Luego sólo hay que llamar al método start() cuando queramos que el Timer empiece a contar.  El código puede ser similar a este:

Timer timer = new Timer (tiempoEnMilisegundos, new ActionListener ()
{
public void actionPerformed(ActionEvent e)
{
// Aquí el código que queramos ejecutar.
}
});

timer.start();

Tenemos también el método stop() para parar el Timer, setRepeats(boolean) para hacer que sea repetitivo o no, etc, etc. Bueno, no es cuestión de poner aquí toda la API de java.

java.util.Timer

Esta clase es más general, tiene más opciones, pero es algo más compleja de usar. Para arrancarlo hay que llamar a alguno de los métodos schedule(). No voy a detallarlos todos porque para eso está la API, pero nos dan bastantes posibilidades. Podemos decirle cosas complejas, como por ejemplo, que «a partir del 22 de febrero de 2007, a las 17:00 empieza a darme avisos cada 5 minutos», o bien podemos decirle cosas sencillas, como «avísame una sola vez dentro de 5 minutos».

Dentro de los avisos repetitivos hay incluso dos opciones.

  • Con los métodos schedule(), si por ejemplo, el aviso es repetitivo cada segundo, es posible que el ordenador esté bastante ocupado haciendo otras cosas, con lo que el aviso nos puede llegar con un cierto retraso. Con esta opción el retraso se acumula de una llamada a otra. Si el ordenador está muy atareado y nos da avisos cada 1.1 segundos en vez de cada 1, el primer aviso lo recibimos en el segundo 1.1, el segundo en el 2.2, el tercero en el 3.3, etc, etc. Si hacemos nuestro reloj de esta forma, cogerá adelantos o retrasos importantes en poco tiempo.
  • La otra opción son los métodos scheduleAtFixedRate(). Con estos métodos los avisos son relativos al primer aviso, de esta forma, si hay retraso en un aviso, no influye en cuando se produce el siguiente. Igual que antes, si el ordenador está muy ocupado y da avisos cada 1.1 segundos en vez de cada segundo, el primer aviso se recibirá en el segundo 1.1, el segundo en el 2.1, el tercero en el 3.1, etc. El retraso no se va acumulando. Está claro que para hacer un reloj, como es nuestro ejemplo, debemos usar la segunda forma (métodos scheduleAtFixedRate() en vez de schedule()).

Para el ejemplo de nuestro reloj, se crea el Timer instanciándolo con un constructor sin parámetros. Luego debemos llamar al método scheduleAtFixedRate(). A este método hay que pasarle tres parámetros:

  • Una clase TimerTask. Dicha clase tiene un método run() (Puesto que TimerTask es una clase abstracta, debemos hacer una clase hija de ella e implementar el método run()) y que es al que se llamará cada cierto tiempo. Ahí debemos poner nuestro código.
  • Usaremos la versión del método en el que el segundo parámetro es un long, que es a partir de cuántos milisegundos queremos que empiece a avisarnos. Si ponemos cero, empezará a avisarnos inmediatamente.
  • Como tercer parámetro lleva otro long, que es cada cuántos milisegundos queremos recibir el aviso.

El código de ejemplo para el reloj puede ser como este
// Clase en la que está el código a ejecutar
TimerTask timerTask = new TimerTask()
{
public void run()
{
// Aquí el código que queremos ejecutar.
}
};
….

// Aquí se pone en marcha el timer cada segundo.
Timer timer = new Timer();
// Dentro de 0 milisegundos avísame cada 1000 milisegundos
timer.scheduleAtFixedRate(timerTask, 0, 1000);

Los ejemplos

Tienes disponibles los fuentes y dos applets funcionado de dos relojes digitales, uno usando javax.swing.Timer y el otro java.util.Timer.

Estadístic

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.