Olá!
No olhei o código com detalhes, afinal, se ele funca pelo menos uma vez isso quer dizer que ele funca!
O problema provavelmente está em coutra parte do codigo. Uma vez que vc instancia uma Thead, ela só poderá ser executada uma vez, ou seja, vc só poderá chamar o método start apenas uma vez! Se vc chamar mais de uma vez deveria ser lançada uma exceção. Se vc não viu essa exceção então provavelmente vc chama o método start da sua Thread dentro de um bloco try catch, ou pelo menos vc está tratando mau suas exceções!
Quando acontecer o evento que inicia a Timer, certifique de ao menos de criar um novo objeto dele antes de usá-lo!
Errado
Timer timer = new Timer();//vc sempre deve instanciar um novo timer
public void metodoQualquer() {
timer.start();
}
Certo
Timer timer = null;
public void metodoQualquer() {
timer = new Timer(); //vc sempre deve instanciar um novo timer
timer.start();
}
Abraços!
Thiago