# Swing Timer, Countdown



## sMau90 (23. Sep 2011)

Hey,
Habe folgenden Code geschrieben um einen kleinen Countdown zu realisieren, allerdings terminiert das Programm direkt nach dem Start und komme leider nicht dahinter wieso. Hoffe mir kann jemand weiterhelfen.


```
public class Countdown{
	
	int stunden;
	int minuten;
	int sekunden;
	Timer timer;
	
	public Countdown(int stunden, int minuten, int sekunden) {
		
		this.stunden = stunden;
		this.minuten = minuten;
		this.sekunden = sekunden;
		
		timer = new Timer(1000, new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.out.println("timermethoder erreicht");
				countDown();
			}

		});
		
	}
	
	public void countDown() {
		
		System.out.println(this.stunden + ":" + this.minuten + ":" + this.sekunden);
		this.sekunden--;
		
		if(sekunden < 0) {
			this.minuten--;
			this.sekunden = 59;
		}
		if(minuten < 0) {
			this.stunden--;
			this.minuten = 59;
		}
		
	}
	
	
	public static void main(String[] args) {
		
		Countdown countdown = new Countdown(0, 1, 10);		
		countdown.timer.setDelay(1000);		
		countdown.timer.start();
		
		
	}
	

}
```

Danke schonmal.
Grüße,
sMau


----------



## bERt0r (23. Sep 2011)

Da javax.swing.Timer den EventDispatchThread braucht um seinen ActionListener auszuführen, benötigst du eine GUI, damit der EDT gestartet wird.
So funktionierts:

```
public class Countdown extends JFrame{
    
    int stunden;
    int minuten;
    int sekunden;
    Timer timer;
    
    public Countdown(int stunden, int minuten, int sekunden) {
        
        this.stunden = stunden;
        this.minuten = minuten;
        this.sekunden = sekunden;
        
        timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                System.out.println("timermethoder erreicht");
                countDown();
            }
 
        });   
    }
    
    public void countDown() {
        System.out.println(this.stunden + ":" + this.minuten + ":" + this.sekunden);
        this.sekunden--;
        if(sekunden < 0) {
            this.minuten--;
            this.sekunden = 59;
        }
        if(minuten < 0) {
            this.stunden--;
            this.minuten = 59;
        }
        
    }
    public static void main(String[] args) {
        Countdown countdown = new Countdown(0, 1, 10);    
        countdown.setVisible(true);
        countdown.timer.setDelay(1000);     
        countdown.timer.start();  
    }
}
```


----------



## noobadix (23. Sep 2011)

Hi,

ich glaube, dass dein EDT abstirbt. Lies mal: Swing (Java) ? Wikipedia

Timer ist Swing und nun brauchst du eine Möglichkeit um den EDT "künstlich" am Leben zu erhalten.

Übrigens finde ich, dass du den Timer in eine eigene, andereKlasse packen solltest, als in die, in der die main-Methode liegt.

Gruß!


----------

