post icon

Crear un Timer en Java

En Java a diferencia de otros lenguajes no tenemos un objeto timer tan fácil de manipular, existe por suerte la clase que nos ayudará pero la implementación es un tanto más larga. Debemos crear manualmente las tareas a ser asignadas, los métodos de inicio, detención y reinicio.

En éste ejemplo sencillo mostraré como imprimir simplemente el tiempo que va pasando con el timer. Pero ustedes podrán agregar más código en la clase llamada MiTarea, incluso podrán crear varias sub clases e ir asignando al schedule del timer y el período de ejecución que van necesitando.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package comunes;
 
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
 
public class Reloj {
 
	Timer timer = new Timer(); // El timer que se encarga de administrar los tiempo de repeticion
	public int segundos; // manejar el valor del contador
	public boolean frozen; // manejar el estado del contador TIMER AUTOMATICO -- True Detenido | False Corriendo
 
	// clase interna que representa una tarea, se puede crear varias tareas y asignarle al timer luego
	class MiTarea extends TimerTask {
		public void run() {
			segundos++;
			System.out.println(segundos);
			// aqui se puede escribir el codigo de la tarea que necesitamos ejecutar
		}// end run()
	}// end SincronizacionAutomatica
 
	public void Start(int pSeg) throws Exception {
		frozen = false;
		// le asignamos una tarea al timer
		timer.schedule(new MiTarea(), 0, pSeg * 1000 * 60);
	}// end Start
 
	public void Stop() {
		System.out.println("Stop");
		frozen = true;
	}// end Stop
 
    public void Reset() {
		System.out.println("Reset");
		frozen = true;
		segundos = 0;
	}// end Reset
 
}// end Reloj
12 abril 2010

Comentarios desde Facebook:

  1. avatar
    berskr COLOMBIA Google Chrome Windows
    28 abril 2013 at 16:50 #

    estoy usando el timer para imprimir en consola, pero solo me imprime una vez. estoy usando mal el timer?

    try {
    Tempo t = new Tempo();
    t.Start(1);
    // TODO code application logic here
    } catch (Exception ex) {
    Logger.getLogger(JavaApplication3.class.getName()).log(Level.SEVERE, null, ex);
    }

    • avatar
      aletruiza PERU Google Chrome Windows
      29 mayo 2013 at 15:39 #

      Me parece que tienes que ponerle un numero mayor a 1, ya que en el código, veo que esta multiplicándolo por mil, esto quiere decir que lo esta convirtiendo en segundos, así que por qué no pones por decir 5, para que sean 5 segundos.
      Intenta con eso.

    • avatar
      ing_sis PERU Google Chrome Windows
      14 julio 2013 at 11:51 #

      El mensaja te muestra cada minuto, la razon:

      timer.schedule(new MiTarea(), 0, pSeg * 1000 * 60);

      si quieres ver mas seguido:

      timer.schedule(new MiTarea(), 0, pSeg * 1000);

      espero te sirva 🙂

  2. avatar
    Javier Cesni MEXICO Mozilla Firefox Windows
    27 febrero 2013 at 18:06 #

    se crea en otra clase el main:

    public static void main(String[] args) {
    Main_Reloj m = new Main_Reloj();
    try {
    m.Start(1);
    } catch (Exception e) { }
    }

    compactando codigo solamente

  3. avatar
    Estudiante SPAIN Mozilla Firefox Windows
    24 enero 2013 at 13:07 #

    public class Main_Reloj {

    Reloj r = new Reloj();

    public static void main(String[] args) {
    Main_Reloj m = new Main_Reloj();
    try {
    m.r.Start(1);
    } catch (Exception e) { }
    }
    }

  4. avatar
    stiven Google Chrome Windows
    8 octubre 2011 at 15:44 #

    como hago para que detenga el contador??? omas bien cual es la forma correcta de instanciar o llamar los metodos en el main???

  5. avatar
    executor BOLIVIA Google Chrome Mac OS
    25 julio 2011 at 11:15 #

    mmm tengo una duda ..sabes como usar un timer con un webservice?, la idea es la de poder controlar el tiempo de conexion ..si este sobrepasa x tiempo que el timer corte la conexion .
    ojala me ayudes ocn este problemita

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      25 julio 2011 at 11:21 #

      No hace falta que reinvestes la rueda con un timer, simplemente puedes setear el timeout de tu WS..

      • avatar
        elAzteka MEXICO Mozilla Firefox Mac OS
        13 diciembre 2012 at 19:21 #

        tienes razon, no hace falta reinventar la rueda 😉

Responder