Mostrando entradas con la etiqueta thread. Mostrar todas las entradas
Mostrando entradas con la etiqueta thread. Mostrar todas las entradas

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á:

Cronometro en Java

Para implementar el cronometro hemos creado una ventana que contiene un label llamado "tiempo", en el cual vamos a mostrar el tiempo. Primero debemos hacer la clase "ejecutable" para ello anadimos "implements runnable" a la clase:

public class cronometro implements Runnable{

Debemos crear un metodo "run" para poder usar hilos, dentro de este, hay un ciclo infinito, que se detiene 1000 milisegundos (1 seg), e incrementa un uno el entero correspondiente a los segundos, cuando este es igual a 59 se aumentan los minutos, y cuando los minutos son iguales a 59 se aumentan las horas

int horas=0, minutos=0, segundos=0;

public void run() {
try
{
for(;;) {
if(segundos==59) { segundos=0; minutos++; }
if(minutos==59) { minutos=0; horas++; }
segundos++;

tiempo.setText(horas+":"+minutos+":"+segundos);

crono.sleep(1000); }
}
catch (InterruptedException e) { System.out.println(e.getMessage()); }
}

Usaremos hilos para manejar el tiempo, para declaramos un hilo global

Thread crono;

Y en el constructor de la clase iniciamos el hilo.

/** Creates new form cronometro */
public cronometro() {

initComponents();
crono = new Thread(this);
crono.start();
}

Y listo! tenemos un cronometro funcionando, podemos pararlo, pausarlo, etc solo es de usar la funcion apropiada.




Codigo Fuente:

/**
*
* @author ces ces2601[arroba]gmail.com
*/

import javax.swing.JFrame;

public class cronometro implements Runnable{

Thread crono;
javax.swing.JLabel tiempo = new javax.swing.JLabel();

/** Creates new form cronometro */
public cronometro() {
JFrame ventana = new JFrame("Cronometro");
ventana.add(tiempo);
ventana.setSize(150,100);
ventana.setVisible(true);

crono = new Thread(this);
crono.start();
}


int minutos=0, segundos=0, horas=0;
public void run()
{ try {
for(;;) {
if(segundos==59) { segundos=0; minutos++; }
if(minutos==59) { minutos=0; horas++; }
segundos++;

tiempo.setText(horas+":"+minutos+":"+segundos);
crono.sleep(1000); }
}
catch (InterruptedException e) { System.out.println(e.getMessage()); }
}

public static void main(String args[])
{
new cronometro();
}

}