Tenho que exibir um cronometro na minha aplicação.
Eh mais ou menos aquele cronometro do provedor de uma internet discada.
Ao iniciar dispara-se o cronometro e o usuario pode pausar através de um click num botão.
Por favor me ajude!!!
Tenho que exibir um cronometro na minha aplicação.
Eh mais ou menos aquele cronometro do provedor de uma internet discada.
Ao iniciar dispara-se o cronometro e o usuario pode pausar através de um click num botão.
Por favor me ajude!!!
Olá Patty, tudo bem?
Fiz uma vez um cronômetro usando threads e baseando todo a lógica na contagem dos segundos. Aqui está a Thread que fiz:
[code]Runnable runnable = new Runnable() {
public void run() {
if ( executar ) {
while ( executar ) {
lblSegundos.setText( String.valueOf( segundos ) );
try {
t.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
segundos = segundos + 1;
if (segundos == 60) {
segundos = 0;
minutos = minutos + 1;
}
lblMinutos.setText( String.valueOf( minutos ) ) ;
}
} else {
segundos = 1;
minutos = 0;
return;
}
}
};[/code]
É claro que você precisará declarar as seguintes variáveis em seu arquivo .java:
Thread t = new Thread(runnable);
boolean executar = false;
int
minutos = 1,
segundos = 1;
Na ação do botão (porque usei uma interface gráfica) fiz da seguinte maneira:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
if (!executar || t.getState().toString() != "TIMED_WAITING" ) {
segundos = 1;
minutos = 0;
executar = true;
t.start();
System.out.println( t.getState() );
} else if (!executar || t.getState().toString() == "TIMED_WAITING" ) {
executar = false;
System.out.println( t.getState() );
}
}
Lembro que tinha tentado fazer o botão iniciar e dar pausa no cronômetro, mas a pausa eu não consegui implementar. Mas você, com esse material inicial e seu talento, certamente conseguirá fazê-lo. Apenas lembre-se de divulgar aqui como você conseguiu.
Olá Patty,
eu fiz um sw uns tempos atras que tinha um cronometro com as mesmas funcionalidades que vc pediu (pausar/continuar) contudo eu ainda acelerava ele ou reduzia a velocidade dos ciclos.
Resolvi isso através de um Timer e não Thread.
Experimenta dar implementar em Thread, caso não consiga me avise que te mando um exemplo em Timer.
flw
Thread.sleep(1000) é aproximadamente 1 segundo…
Se voce estiver por exemplo abrindo um outro programa que esteja usando muito o processador esse 1 segundo demora mais de um segundo.
Voce tem que fazer algo baseado no relogio interno, mas tem outro problema…
SE ALGUEM MUDAR A HORA DA MAQUINA.
vc precisa de muita precisao neste contador?
Tenho um exemplo que utilizei recentemente:
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.Timer;
/**
* Objetivo: Controlar o timer
* Data: 07/08/2006
* @author Fabio Pedrosa
* @version 1.0
*/
public final class TimerCall {
/** Constantes */
private static final int TIME = 1000;
/** Atributos */
private static DateFormat dateFormat = null;
private static Calendar calendar = null;
private static Timer timer = null;
static {
dateFormat = new SimpleDateFormat("HH:mm:ss");
calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
}
/** Construtor */
private TimerCall() {}
/**
* Objetivo: Iniciar o timer da ligação
* Data: 07/08/2006
* @param action ActionListener
*/
public static void startTimer(ActionListener action) {
timer = new Timer(TIME, action);
timer.start();
}
/**
* Objetivo: Parar o timer da ligação
* Data: 07/08/2006
*/
public static void stopTimer() {
System.out.println("stopTime()");
if(timer!=null){
if(timer.isRunning()) {
timer.stop();
resetTimer();
}
}
}
public static boolean isTimerRunning(){
boolean flagTimer = false;
if(timer!=null){
if(timer.isRunning()){
flagTimer = true;
}
}
return flagTimer;
}
/**
* Objetivo: Zerar o timer da ligação
* Data: 07/08/2006
*/
protected static void resetTimer() {
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
timer = null;
}
/**
* Objetivo: Montar o timer
* Data: 07/08/2006
* @return String
*/
public static String getTime() {
calendar.add(Calendar.SECOND, 1);
if(timer != null) {
return dateFormat.format(calendar.getTime());
}
return "";
}
}
Eu tentei tudo que vcs me indicaram mas não funcionou…
Então, se tiverem mais alguma outra sugestão por favor coloquem aqui.