La classe che usi (Timer di swing) vive esclusivamente se vi è un Thread vivo , infatti se noi ne creiamo uno e lo lanciamo la tua classe funziona:
codice:
import java.awt.event.*;
import javax.swing.Timer;
class Test implements ActionListener{
public static void main(String[] args){
MioThread threadSempreAttivo=new MioThread();
threadSempreAttivo.start();
Timer t = new Timer( 2000,new Test() );
t.start();
}
public void actionPerformed(ActionEvent event){ System.out.println("Hello World"); }
}
class MioThread extends Thread{
public void run(){
try {
while(true){
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Eseguendo il codice scritto sopra come vedi funziona (non rappresenta la soluzione sia chiaro mi serve solo per farti capire, la soluzione sarà l'uso della classe di cui ti parlo poco più sotto) .
Altrimenti puoi creare una GUI (anche banale) e visualizzarla , il suo thread grafico è sufficiente a mantenere vivo il tuo timer:
codice:
class Test implements ActionListener{
public static void main(String[] args){
JFrame frame=new JFrame();
frame.show();
Timer t = new Timer( 2000,new Test() );
t.start();
}
public void actionPerformed(ActionEvent event){ System.out.println("Hello World"); }
}
Ma questi sono solo esempi.
Se tu vuoi invece creare una applicazione non grafica (“console”) devi usare la classe Timer del package java.util.
Usi il suo costruttore vuoto.
Estendi poi una classe TimerTask e riscrivi il suo metodo run all’interno del quale metti l’azione da compiere (in fondo è la stessa cosa di quando implementavi ActionListener e riscrivevi actionPerformed…) dopodiché chiami il metodo schedule che come argomenti vuole l’istanza di TimerTask , il ritardo ed ogni quanto deve chiamre run.
Per far partire il timer chiami start().
Questo timer apre un suo Thread e vive da solo.
codice:
import java.util.Timer;
import java.util.TimerTask;
import java.awt.event.*;
import javax.swing.*;
class Test{
public static void main(String[] args){
Timer timer=new Timer();
timer.schedule(new Task(),0,1000);//parti subito e itera ogni secondo
}
}
class Task extends TimerTask{
public void run(){
System.out.println("Hello");
}
}