# Countdown erstellen



## Rckr (3. Jan 2006)

hi!
ich hab mir n programm geschrieben mit dem ich einstelln kann in wieviel minuten der pc runterfahren soll (schön um beim einschlafen musik zu hörn  ) das funzt soweit alles...
jetzt will ich aber noch ne anzeige einbinden die mir die zeit runterzählt!!
ich hab 3numberspinner, also für std, min, sek!
die werte daraus hab ich in der methode berechnen() in ms umgewandelt (int zeit)...
ich hab des jetzt ma versucht so zu lösen:


```
public void timeleft(int zeit){
   for ( int i = zeit ; i > 0 ; i=i-1000 ) {
     tf_info.setText(zeit +" bis zum shutdown");

     try {
        Thread.sleep(1000);
     }catch(InterruptedException e){
       System.out.println("Fehler :-)");
     }
   }
 }
```

mit meim startbutton hab ich dann noch timeleft(berechnen()); aufgerufen...
das prog hängt sich jetzt sobald ich n countdown starte auf.... auch wenn ich z.b. timeleft(10000) mach funzt der countdown nicht und das prog läuft xtreme langsam....

hab scho viel rumgemacht, au andere sachen probiert aber nix vernünftiges hingekriegt... und google hilft da wenig da ich da nur java-script countdowns finde :/

wär echt cool wenn ihr mir helfen könntet 

gruß
Rckr


----------



## SlaterB (3. Jan 2006)

problematisch ist schon mal dass du das unveränderte 'zeit' anzeigen läßt,
während es doch i ist, welches runtergezählt wird 

und das andere Problem kommt daher dass die Action des JButtons erst mit Ende der Operation timeleft beendet ist,
solange wird in der GUI kein anderes Event behandelt
Lösung: timeleft in einen separaten Thread stecken und damit die Button-Aktion frühzeitig beenden

Beispiel:

```
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Main extends JFrame implements ActionListener {

	
	int zeit = 12000;
	
	JTextField tfInfo = new JTextField(20);
	JButton countdownButton = new JButton("Starte Countdown");

	public Main() {
		JPanel p = new JPanel();
		p.add(tfInfo);
		countdownButton.addActionListener(this);
		p.add(countdownButton);


		getContentPane().add(p, BorderLayout.CENTER);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setSize(400, 150);
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == countdownButton) {
			Runnable r = new Runnable() {

				public void run() {
					for (int i = zeit; i > 0; i = i - 1000) {
						tfInfo.setText(i + " bis zum shutdown");

						try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							System.out.println("Fehler :-)");
						}
					}
				}

			};
			
			new Thread(r).start();
		}
	}


	public static void main(String[] args) {
		new Main();
	}
}
```


----------



## Rckr (3. Jan 2006)

ah ja klar das mit zeit is schon schwachsinn ^^
asoo jetzt is mir des au klar...
hmmh hab mir deine lsg ejtzt nur durchgelesen, noch nicht probiert.. die sache da ist halt noch dass ich dann n wert in ms krieg, was aber nicht grad aufschlussreich ;-)


----------



## Rckr (3. Jan 2006)

ok habs jetzt so umgewurstelt dass es in ms für mich geht...

werd morgen mir ma n strukt. machen für die anzeige mit std min sek....  wenns funzt stell ichs hier rein 

thx  :applaus:


----------

