Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace http://www.chuidiang.org

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.

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:

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ísticas y comentarios

Numero de visitas desde el 4 Feb 2007: