Juan Carlos Castro Brenes Uso de la clase Timer El paquete swing tiene una clase llamada Timer que permite la realización de tareas periódicas. Los objetos Timer pueden usarse de dos maneras: • Ejecutar una tarea después de que haya transcurrido cierto tiempo. • Ejecutar una tarea repetidamente (e.g: una animación). El funcionamiento de esto objeto es bastante sencillo. Creación de un objeto Timer La clase Timer tiene únicamente el siguiente constructor: Timer(int delay, ActionListener listener) El primer argumento es el tiempo entre cada tarea y el segundo un objeto que implemente la interfaz ActionListener cuyo método actionPerformed estará encargado de ejecutar las tareas. Volviendo al ejemplo anterior con hilos donde se tenían dos tareas, una que mostrara la fecha y otra que mostrara la hora, con objetos Timer la tarea resulta mucho más sencilla. Primero que nada hay que crear dichas tareas: t_Date = new Timer(10000,this); t_Hour = new Timer(1000 ,this); El siguiente paso es arrancar estas dos tareas para lo cual los objetos Timer disponen de un método start(). t_Date.start(); t_Hour.start(); Lo último que queda es escribir el código en el método actionPerformed para que efectúe las tareas correspondientes. En este caso el código sería semejante al siguiente: public void actionPerformed(ActionEvent e){ Object o = e.getSource(); if(o instanceof Timer){ if(o == this.t_Date){ this.dateTask(); } else if(o == this.t_Hour){ this.hourTask(); } } } El código completo de un programa manejando dos tareas con objetos Timer se muestra a continuación: /** Esta clase es un ejemplo de la clase Timer del paquete Swing. */ import javax.swing.*; import javax.swing.Timer; import java.awt.event.*; public class TimerSample extends JFrame implements ActionListener{ private int dateDelay = 5000; // la fecha se actualiza cada 5 segundos private int hourDelay = 1000; // la hora se actualiza cada segundo. Timer t_Date; Timer t_Hour; /** Constructor de la clase */ public TimerSample(){ this.initTimers(); // inicializar timers... this.startTimers(); // arranca los timers... } /** Este método inicializa los timers */ public void initTimers(){ this.t_Date = new Timer(this.dateDelay,this); this.t_Hour = new Timer(this.hourDelay,this); } /** Este método arranca los timers */ public void startTimers(){ // después de llamar a los métodos start de cada objeto Timer // se harán llamadas periódicas al método actionPerformed. // t_Date enviará un evento cada dateDelay segundos y // t_Hour enviará un evento cada hourDelay segundos. this.t_Date.start(); this.t_Hour.start(); } /** El manejador de eventos de esta clase */ public void actionPerformed(ActionEvent e){ Object o = e.getSource(); if(o instanceof Timer){ if(o == this.t_Date){ this.dateTask(); } else if(o == this.t_Hour){ this.hourTask(); } } } /** La acción de la fecha */ public void dateTask(){ System.out.println("Ejecutando Fecha"); } /** La acción de la hora */ public void hourTask(){ System.out.println("Ejecutando Hora"); } public static void main(String args[]){ new TimerSample(); } }