Eu preciso implementar um Timer que seja exibido em 2 frames diferentes exatamente o mesmo horário de forma sincronizada.
Da forma que eu fiz funciona para uma tela, porém a outra não fica sincronizada.
Segue o meu Código:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JLabel;
public class Cronometro {
private static Cronometro cronometroInstance = null;
public Timer timer;
private DateFormat formato = new SimpleDateFormat("HH:mm:ss");
private Calendar calendario = Calendar.getInstance();
private byte contagem;
public static final byte PROGRESSIVO = 1;
public static final byte REGRESSIVO = -1;
public static Cronometro getInstance() {
if (cronometroInstance == null)
cronometroInstance = new Cronometro();
return cronometroInstance;
}
private Cronometro() {
this.timer = null;
this.contagem = 0;
}
public void configurar(String pTexto, byte tipoContagem) {
Calendar calendar = Calendar.getInstance();
Date data;
try {
data = formato.parse(pTexto);
calendar.setTime(data);
} catch (ParseException ex) {
throw new NegocioException("Não foi possível converter esta data/hora", ex);
}
this.timer = new Timer();
this.calendario.set(0, 0, 0, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND));
this.contagem = tipoContagem;
}
public void iniciar(JLabel pLabel) {
TimerTask tarefa = new TimerTask() {
@Override
public void run() {
pLabel.setText(getTime());
}
};
this.timer.scheduleAtFixedRate(tarefa, 0, 1000); // 1 segundo
this.timer = null;
}
public String getTime() {
calendario.add(Calendar.SECOND, contagem);
return formato.format(calendario.getTime());
}
}