# Jede Sekunde



## unknown_member (2. Feb 2007)

Hey!

Eine kurze Frage:

Wie kann ich zB _jede Sekunde_ zu einem Double 1 addieren?


thx, unknown_member


----------



## blue_devil86 (2. Feb 2007)

am besten mit einen Thread

das müste einfügen wo du ein laufenden code hast die 2 zeilen
Thread warten= new Thread(new Warten ());
Warten.start();

und das schiebste so nei achtung neue klasse

public class Warten implements Runnable {             

         public void run() {  

            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                    System.out.println("kann das ding net anhalten");
            }      
        addiere++;
        System.out.println("Plus eins : " + addieren); 
        Thread warten= new Thread(new Warten ());
        Warten.start();
        }
}


----------



## unknown_member (2. Feb 2007)

Danke!


----------



## dieta (2. Feb 2007)

@ blue_devil86:
Am besten über einen Thread, deine Methode ist aber etwas aufwändig: Du musst jede Sekunde ein neues Objekt erzeugen und jede Sekunde den Thread neu starten. Das wird bei kürzeren Intervallen schon ganz schön unhandlich.

Am "besten" denke ich, löst man das über den Swing-Timer:

```
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TimerTest implements ActionListener
{
	
	private Timer timer = new Timer(1000, this);
	private double d = 0;
	
	public TimerTest()
	{
		timer.start();
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		d++;
	}
	
	
	public static void main(String[] args)
	{
		TimerTest tt = new TimerTest();
	}
	
}
```
Außerdem wird in dienem Code "addiere" nicht deklariert und du hast "addiere" einmal mit und einmal ohne 'n' geschrieben.

Zur Klasse javax.swing.Timer:
Der übergibtst du einen Zeitintervall in Millisekunden und einen ActionListener, udn nachdem der Timer gestartet wurde, ruft er alle x Millisekunden die actionPerformed-Methode des übergebenen ActionListeners auf.


Wenn du's unbedingt mit einem Thread machen, willst, dann geht das am besten mit eienr Endlosschleife, die *in* dem try-catch-Block für die InterruptedException steht (sonst kannst du den Thread nicht mehr stoppen):

```
public class TimerTest implements Runnable
{
	
	Thread timerThread = new Thread(this);
	
	public TimerTest()
	{
		timerThread.start();
	}
	
	public void run()
	{
		try
		{
			while(true)
			{
				Thread.sleep(1000);
				d++;
			}
		}
		catch(InterruptedException ex)
		{
			//Nichts tun, der Thread wurde unterbrochen
		}
	}
	
	
	public static void main(String[] args)
	{
		TimerTest tt = new TimerTest();
	}
	
}
```


----------



## unknown_member (2. Feb 2007)

dieta hat gesagt.:
			
		

> [...] Der übergibtst du einen Zeitintervall in Millisekunden und einen ActionListener [...]




Und wie funktioniert das?

Dein Prog wird sofort beendet...


----------



## dieta (3. Feb 2007)

Ich schätze mal, der Timer macht das auch mit einem Thread.
Ist allerdings etwas komfortabler, als es sich slebst zu proggen.

Damit mein Beispielprog auf funzt:

```
import javax.swing.Timer;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TimerTest implements ActionListener
{
	
	private Timer timer = new Timer(1000, this);
	private double d = 0;
	
	public TimerTest()
	{
		timer.start();
		try
		{
			while(true)
			{
				System.out.println("Wert von \"d\": "+Double.toString(d));
				Thread.sleep(1000);
			}
		}
		catch(InterruptedException ex)
		{
			//Nichts tun, der Thread wurde unterbrochen, das Programm wurde beendet
		}
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		d++;
	}
	
	
	public static void main(String[] args)
	{
		TimerTest tt = new TimerTest();
	}
	
}
```


----------



## unknown_member (3. Feb 2007)

Danke dieta! Damit hast du mir sehr weitergeholfen! :applaus:  :applaus: 

[schild=1]Danke!!![/schild]


----------

