Cronometro en Java usando NetBeans

Cuando usamos NetBeans, no podemos hacer lo que había mostrado en la entrada anterior a este tema (Cronometro en Java):

public class cronometro implements Runnable{

puesto que la clase ya hereda de JFrame cuando se trabaja en NetBeans, la solucion para implementar un cronometro en NetBeans es bien sencilla, a continuacion vamos a ver como:

El hilo
Lo primero es crearnos un objeto de tipo Thread, en el cual vamos a definir nuestro método"run" el cual contendrá las acciones que queremos que nuestro cronometro haga, en este caso mostrar los minutos, segundos y horas que lleva.

Thread hilo = new Thread()
{
public void run()
{
try
{
while(true)
{
if(seg==59) { seg=0; min++; }
if(min==59) { min=0; hora++; }
seg++;

lblTime.setText(hora+":"+min+":"+seg);

hilo.sleep(1000);
}
} catch (java.lang.InterruptedException ie) { System.out.println(ie.getMessage()); }
}
};

Dentro del metodo "run" hacemos un ciclo infinito, while(true) y con la funcion sleep() definimos cuanto se va a tardar en hacer la siguiente corrida, el tiempo siempre se pasa en milisegundos, asi que si definimos sleep(1000) se va a tardar un segundo en hacer la siguiente corrida, que es lo que queremos, que valla aumentando de segundo en segundo,

Los eventos
Los eventos de nuestro cronometro son 3, iniciar, pausar y parar. El evento de iniciar es de dos tipos, ya sea cuando vamos a iniciar el cronometro o si esta pausado y queremos resumirlo.

public boolean issuspended = false;
private void btnStartMouseClicked(java.awt.event.MouseEvent evt) {

if(!issuspended)
{
hilo.start();
lblStatus.setText("Estado: Iniciado");
}
else
{
hilo.resume();
issuspended = false;
lblStatus.setText("Estado: Resumido");
}

}

Primero preguntamos si esta pausado, si no lo esta lo iniciamos (start), si esta pausado lo resumimos (resume). Para pausar el cronometro usamos el metodo "suspend" que pausa indefinidamente el cronometro:

hilo.suspend();
issuspended = true;
lblStatus.setText("Estado: Suspendido");

Y para paralo usamos "stop":

hilo.stop();
lblStatus.setText("Estado: Parado");

Y listo, nuestro cronometro se vera así:





Descarga el ejemplo completo acá:

17 comentarios:

  Marcelo

12 de agosto de 2010, 20:48

Bien antres que anda disculpa no pude Agradecerte antes de este super ejemplo :) Y estoy haceindo un trabajo para la escuela consiste en un cronometrar el tiempo en un maraton o similares con numero de atleta y todo Me esta quedando muy BIEn tu blog me ayudo muxisimo.SI deseas puedo Subirlo a un un server para compartir. Como me queda Bye :)

  Gray

17 de octubre de 2010, 15:32

Buen aporte amigo =D!

estoy haciendo un trabajo para la U y necesitaba este cronometro pero con diferencias que puedo hacer =) lo unico que te queria pregunta, es como se hace para que empieze automatico como tu ejemplo anterior y tambien como modificar el titulo del jframe, obiamente de poder hacer eso tu blog estara en mi bibliografia.

de antemano y agradeciendo tan buen blog, muchas gracias.

  Ces

17 de octubre de 2010, 15:35

para que inicie automatico debes agregar en el constructor la llamada para que el hilo empiece:

public jframe(String un, String modo) {
initComponents();
hilo.start();
}

los archivos que estan en mediafire y rapidshare con el proyecto, asi que si lo abres con netbeans podras modificar el titulo/codigo, etc.

saludos

  Gray

17 de octubre de 2010, 15:41

wa muchas gracias ces's =) probare y si me resulta me ahorraste mucho trabajo =)

se te agradece mucho tu ayuda

  Anónimo

9 de noviembre de 2010, 3:57

Hola Ces,

muchas gracias por tu ejemplo, pero al crearlo yo me dice que resume(), stop() y suspend(), están deprecated.

Qué métodos debería usar que no estén deprecated?

Saludos

  Ces

9 de noviembre de 2010, 6:44

cheka esta link:

http://download.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

saludos

  Anónimo

25 de noviembre de 2010, 19:26

Hola me ha servido bien, pero tengo una duda, como puedo detenerlo y que regrese a cero el contador para que cuando le vuelva a dar star empieze de nuevo.
Gracias

  Rodrigo

28 de diciembre de 2010, 13:06

Hola como puedo hacer que al abrise la aplicacion comienze automaticamente el cronometro y cuando esta termine al volverla a abrir pueda iniciarse denuevo el cronometro desde cero??

saludos

muy buen aporte

y muy interesante el blog

  Ces

29 de diciembre de 2010, 16:44

@Rodrigo,

inicia el cronometro (hilo.start) en el constructor de la clase, seguido de initComponents();

saludos!

  Anónimo

30 de diciembre de 2010, 15:51

Oye agrega:
rodrigo-ochoa1986@hotmail.com

Para hacerte un par de consultas.

De antemano gracias, que andes chevere

  Rodrigo

30 de diciembre de 2010, 18:52

oye Ces como haces para que el cronometro empieze en 00:00:00 (con dos ceros) y no de la forma 0:0:0(con un cero)???

Saludos

  Osloga

7 de noviembre de 2012, 17:49

Muchas gracias por el código amigo me ayudo con un programa de traducción al lenguaje sordomudo con imágenes gracias

  luis

27 de noviembre de 2012, 6:31

Muchisimas gracias por el codigo lo estaba buscando desde hace rato

  TuProyectoEn2x3

25 de mayo de 2014, 1:28

Amigo los links estan caidos, y los necesito urgennnte ayuuda

  eduardo

28 de enero de 2016, 13:18

gracias.

  Unknown

30 de marzo de 2016, 18:04

Como inicio la ventana del cronometro?

  Anónimo

31 de mayo de 2019, 9:14

Los enlaces de descarga no andan.