Persistência do temporizador giratório após a conclusão do método principal

Estou tentando criar um programa para executar uma tarefa simples e produzir uma saída a cadax segundos. Também quero que o programa seja executado até que eu decida fechar manualmente o program

Eu tenho tentado implementar isso usando um timer Swing, pois acredito que essa é a melhor maneira. O problema é que não sei como manter o programa funcionando depois que o método principal terminar a execução. Então, por exemplo, eu tenho:

 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 termina a execução imediatamente. Posso evitar o problema colocando o segmento de execução atual em suspensãoThread.currentThread().sleep(..), mas isso parece um trabalho ruim e, em última análise, terá duração limitada. Também posso fazer enquanto (verdade), mas acredito que isso é uma prática rui

minha pergunta é como obter o comportamento de persistência desejado e se existe uma maneira melhor do que usar os temporizadores Swin

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion