# Anwendung (Label soll dauernt den text ändern)



## mrno (15. August 2004)

Hi,
ich habe ein großes problem. Ich will ein programm schreiben mit einer counter funktion. 
Code für den Counter sieht so aus.
public void count()
 {
   while (zeit>0) {
   zeit--;
  label1.setText("" + zeit);
  try {
    Thread.sleep(1000);
  }
  catch (InterruptedException e) {
  }
  }
 }

Mein problem ist solange der counter läuft reagiert das programm nicht mehr. Gibt es eine möglichkeit, das ich auch wären der counter läuft andere funktionen des programmes nuten kann. oder den counter per klick auf einem button stoppen kann?


----------



## Snape (15. August 2004)

> _Original geschrieben von mrno _
> *Hi,
> ich habe ein großes problem. Ich will ein programm schreiben mit einer counter funktion.
> Code für den Counter sieht so aus.
> ...



Das geht wohl am besten in einem Thread. Z.B. so:

```
MyThread myThread = new MyThread();
myThread.start();

class MyThread extends Thread
{
  public void start()
  {
   while (zeit>0)
   {
    zeit--;
    label1.setText("" + zeit);
    try
    {
      Thread.sleep(1000);
    }
    catch (InterruptedException e)
    {
    }
  }
 }
}
```

Ich hoffe ich habe nichts vergessen...


----------



## mrno (15. August 2004)

So hatte ich es bis jetzt auch. Mein problem ist jetzt nur solange das Thread läuft reagiert der rest vom Programm nicht mehr. Ich will aber das man andere sachen nebenher machen kann.


----------



## Thomas Darimont (15. August 2004)

Hallo!

Was verwendest du denn für deine GUI? (AWT, SWT, Swing)?
In den meisten GUI System dürfen Veränderungen am UI nur durch den UI bzw. EventDispatch Therad  durchgeführt werden.

Beispiel1 


```
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

/*
 * Created on 15.08.2004
 */

/**
 * @author Administrator
 * http://www.tutorials.de
 */
public class Ticker extends JFrame {

	private final JLabel label;
	private Timer timer;

	public Ticker() {
		super("Ticker");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		timer = new Timer(100, new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				label.setText("" + System.currentTimeMillis());
			}
		});

		label = new JLabel("" + System.currentTimeMillis());
		getContentPane().add(label, BorderLayout.CENTER);

		timer.start();
		pack();
		setVisible(true);
	}

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

Beispiel2:


```
import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

/*
 * Created on 15.08.2004
 */

/**
 * @author Administrator
 * http://www.tutorials.de
 */
public class Ticker extends JFrame {

	private final JLabel label;
	private Runnable runnable;
	private Thread refresherThread = new Thread() {
		{
			setPriority(Thread.MIN_PRIORITY);
		}
		public void run() {
			try {
				while (true) {
					SwingUtilities.invokeLater(runnable);
					sleep(100);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	};

	public Ticker() {
		super("Ticker");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		runnable = new Runnable() {
			public void run() {
				label.setText("" + System.currentTimeMillis());
			}
		};
		label = new JLabel("" + System.currentTimeMillis());
		getContentPane().add(label, BorderLayout.CENTER);

		refresherThread.start();

		pack();
		setVisible(true);
	}

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

Gruß Tom


----------



## mrno (15. August 2004)

thx. hat funktioniert


----------

