temporizador - java timer cancel
Persistencia del temporizador de balanceo después de finalizar el método principal (2)
Intento crear un programa para realizar una tarea simple y producir una salida cada x
segundos. También quiero que el programa se ejecute hasta que decida cerrar manualmente el programa.
He estado intentando implementar esto usando un temporizador Swing, ya que creo que esta es la mejor manera. El problema es que no estoy seguro de cómo mantener el programa funcionando una vez que el método principal ha terminado de ejecutarse. Entonces, por ejemplo, tengo:
static ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try {
//do stuff
} catch (Exception e) {
e.printStackTrace();
}
}
};
public static void main(String[] args) throws Exception{
Timer timer = new Timer(3000, taskPerformer);
timer.start();
}
que acaba de terminar la ejecución de inmediato. Puedo eludir el problema poniendo el hilo de ejecución actual en modo de suspensión Thread.currentThread().sleep(..)
, pero esto se siente como un trabajo fallido, y finalmente será de duración finita. También puedo hacerlo mientras (verdadero), pero creo que esta es una mala práctica.
Mi pregunta es cómo obtener el comportamiento de persistencia deseado, y si hay una mejor manera de usar los temporizadores Swing.
Gracias.
Un Swing Timer permanecerá vivo mientras el EDT esté activo, generalmente esto se hace teniendo una GUI Swing presente y visible (esto crea un hilo no-demonio que persiste hasta que la GUI sale). Si no necesitas una GUI Swing, entonces no uses un Swing Timer. Tal vez use un java.util.Timer, y no salga del método principal hasta que le dé la palabra (como quiera hacer eso).
Use java.util.Timer en su lugar. El hilo asociado no se ejecutará como daemon.