# Sleep Funktion / Thread-Problem !



## achim1976 (25. Jul 2008)

Hallo,
ich habe einen Klasse Counter geschrieben, in der es Funktionen gibt, dass ich ein Datum eingebe und mir Java dann mit den Datums- und Zeitklassen die Zeit bis dahin ausrechnet. 
Dann habe ich eine Klasse Zeiteingabe, diese ist eine grafische Oberfläche mit nem JFrame mit 6 Eingabefeldern (Monat, Tag, Jahr usw), wenn ich dort dann den button drücke "berechen", dann soll ein neues Fenster aufgehen, wo dann die Zeit rückwärtsläuft...Dieses zweite Fenster hat eine eigene Klasse... das problem ist glaube ich, dass ich das erste Fenster einfach auf visible (false) setze, anstatt es zu beenden.
kann mir jemand sagen wie das geht?
weil ohne dass ich dieses Fenster beende funktioniert in dem 2.Fenster die sleep() Methode nicht!

ps: ich programmier noch nicht so lange mit java!

lg, achim


----------



## Quaxli (25. Jul 2008)

Nimm mal statt setVisible(false) lieber dispose().

Wenn das nicht hilft, poste mal ein kleines Beispielprogramm.

<edit>
  Ich wüßte jetzt aber nicht, warum sich die Sichtbarkeit eines Frames auf eine sleep-Methode auswirken sollte.
  Vielleicht solltest Du auf jeden Fall mal etwas Code posten, um den einen oder anderen Tipp zu bekommen.
</edit>


----------



## SlaterB (25. Jul 2008)

sleep() sollte unabhängig von der Anzahl der Fenster funktionieren,
wobei natürlich zu empfehlen ist, nicht den AWT-Thread, der die GUI steuert, schlafen zu legen,
sondern einen separaten Thread

poste doch mal deine bisherigen Klassen als lauffähiges Testprogramm,
ohne großes Layout oder ähnlich unnötige Bestandteile


----------



## achim1976 (25. Jul 2008)

ich bin gerade dabei alles in ein fenster zu legen, ich leere dann den container und baue dann einfach die zweite klasse in methoden auf...ist zwar unüberischtlich aber vllt funktionier es ja.

mit dispose() hat es auch nicht geklappt!
ich halte euch auf dem laufenden, wenn es immer noch nicht geht poste ich mal den code


----------



## achim1976 (29. Jul 2008)

so hier ist der code!!!
ich hab keine ahnung warum es nicht geht, ich hab schon alles mögliche probiert!
es liegt eindeutig an dieser Thread.sleep() Funktion!!!

```
package Counter;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class ZielDatum extends Thread{
	public JFrame window = new JFrame("Counter by annica");
	
	private JTextField tag = new JTextField();
	private JTextField monat = new JTextField();
	private JTextField jahr = new JTextField();
	private JTextField sekunde = new JTextField();
	private JTextField stunde = new JTextField();
	private JTextField minute = new JTextField();
	
	
	private final JLabel TAG=new JLabel("Tag");
	private final JLabel MONAT=new JLabel("Monat");
	private final JLabel JAHR=new JLabel("Jahr");
	private final JLabel SEKUNDE=new JLabel("Sekunde");
	private final JLabel MINUTE=new JLabel("Minute");
	private final JLabel STUNDE=new JLabel("Stunde");
	
	private JButton zeit= new JButton("Countdown");
	
	
	public ZielDatum() {
		// schliessen-Funktion hinzufï¿½gen
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Fenster sichtbar machen
		window.setVisible(true);
		// Fenster Groesse setzen
		window.setSize(230, 200);
		// Fensterplatz setzen
		window.setLocation(400, 300);

		kreieren();
	}
	
	public void kreieren() {
		Container cp = window.getContentPane();
		cp.setLayout(null);
		
		tag.setBounds(35, 75, 30, 30);
		cp.add(tag);
		TAG.setBounds(35, 50, 30, 30);
		cp.add(TAG);
	
		monat.setBounds(80, 75, 30, 30);
		cp.add(monat);
		MONAT.setBounds(80, 50, 40, 30);
		cp.add(MONAT);
		
		jahr.setBounds(125, 75, 60, 30);
		cp.add(jahr);
		JAHR.setBounds(125, 50, 30, 30);
		cp.add(JAHR);
		
		stunde.setBounds(35, 25, 30, 30);
		cp.add(stunde);
		STUNDE.setBounds(35, 0, 50, 30);
		cp.add(STUNDE);
		
		minute.setBounds(80, 25, 30, 30);
		cp.add(minute);
		MINUTE.setBounds(80, 0, 50, 30);
		cp.add(MINUTE);

		sekunde.setBounds(125, 25, 30, 30);
		cp.add(sekunde);
		SEKUNDE.setBounds(125, 0, 50, 30);
		cp.add(SEKUNDE);
		
		zeit.setBounds(35, 120, 150, 25);
		zeit.setText("Countdown starten");
		cp.add(zeit);
		zeit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				Countdown_startActionPerformed(evt);
			}
		});
		
		window.repaint();
	}
	
	
	public void Countdown_startActionPerformed(ActionEvent evt) {
		int zeit[]=new int [6];
		zeit[0]=Integer.parseInt(tag.getText());
		zeit[1]=Integer.parseInt(monat.getText());
		zeit[2]=Integer.parseInt(jahr.getText());
		zeit[3]=Integer.parseInt(stunde.getText());
		zeit[4]=Integer.parseInt(minute.getText());
		zeit[5]=Integer.parseInt(sekunde.getText());
		
		//das alte fenster abschießen
		window.dispose();
		
		//die neue oberfläche erzeugen
		Oberflaeche ober = new Oberflaeche(zeit);
		try{
			while(true){
				ober.zeit();
				window.repaint();

				Thread.sleep(1000);
			}
		}
		catch(Exception e){

		}
		


	}
	
	public static void main(String[] args) {
		ZielDatum ziel= new ZielDatum();
	}
}
```






```
package Counter;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Oberflaeche {

	private int zeit[] = new int[6];

	// Fenter erstellen
	public JFrame window = new JFrame("Counter by annica");

	private JLabel tag=new JLabel();
	private JLabel monat=new JLabel();
	private JLabel jahr=new JLabel();
	private JLabel stunde=new JLabel();
	private JLabel minute=new JLabel();
	private JLabel sekunde=new JLabel();

	private final JLabel TAG =new JLabel("Tage");
	private final JLabel MONAT =new JLabel("Monate");
	private final JLabel JAHR=new JLabel("Jahre");
	private final JLabel STUNDE=new JLabel("Stunden");
	private final JLabel MINUTE=new JLabel("Minuten");
	private final JLabel SEKUNDEN=new JLabel("Sekunden");


	public Oberflaeche(int[] zeit) {
		this.zeit=zeit;

		// schliessen-Funktion hinzufuegen
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Fenster sichtbar machen
		window.setVisible(true);
		// Fenster Groesse setzen
		window.setSize(230, 150);
		// Fensterplatz setzen
		window.setLocation(400, 300);

		kreieren();
	}

	public void kreieren() {
		Container cp = window.getContentPane();
		cp.setLayout(null);

		STUNDE.setBounds(5, 5, 286, 30);
		cp.add(STUNDE);
		stunde.setBounds(5, 25, 286, 30);
		cp.add(stunde);

		MINUTE.setBounds(60, 5, 286, 30);
		cp.add(MINUTE);
		minute.setBounds(60, 25, 286, 30);
		cp.add(minute);

		SEKUNDEN.setBounds(110, 5, 286, 30);
		cp.add(SEKUNDEN);
		sekunde.setBounds(110, 25, 286, 30);
		cp.add(sekunde);

		TAG.setBounds(5, 55, 200, 25);
		cp.add(TAG);
		tag.setBounds(5, 75, 200, 25);
		cp.add(tag);


		MONAT.setBounds(40, 55, 200, 25);
		cp.add(MONAT);
		monat.setBounds(40, 75, 200, 25);
		cp.add(monat);

		JAHR.setBounds(90, 55, 200, 25);
		cp.add(JAHR);
		jahr.setBounds(90, 75, 200, 25);
		cp.add(jahr);

		JAHR.setFont( new Font("Georgia", Font.BOLD, 15) );
		JAHR.setForeground(Color.magenta);


		window.repaint();
	}

	public void zeit(){
		Counter count = new Counter(this.zeit);
		int[] bis_dato = count.wielangenoch();
		tag.setText(""+bis_dato[0]);
		monat.setText(""+bis_dato[1]);
		jahr.setText(""+bis_dato[2]);
		stunde.setText(""+bis_dato[3]);
		minute.setText(""+bis_dato[4]);
		sekunde.setText(""+bis_dato[5]);
	}
	
	


	public static void main(String args[]) {
	
	}


}
```


[/code]


----------



## Gast2 (29. Jul 2008)

Hallo,

1. weiß ich nacht was deine Klasse Counter macht
2. Benutzt du deinen Thread nicht, weiß nicht warum du davon erben lässt.
3. hast du eine endlosschleife
4. hab dein code mal etwas verbessert ohne jetzt nach der logik zu schauen


```
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Oberflaeche extends JFrame{

   private int zeit[] = new int[6];

   private JLabel tag=new JLabel();
   private JLabel monat=new JLabel();
   private JLabel jahr=new JLabel();
   private JLabel stunde=new JLabel();
   private JLabel minute=new JLabel();
   private JLabel sekunde=new JLabel();

   private final JLabel TAG =new JLabel("Tage");
   private final JLabel MONAT =new JLabel("Monate");
   private final JLabel JAHR=new JLabel("Jahre");
   private final JLabel STUNDE=new JLabel("Stunden");
   private final JLabel MINUTE=new JLabel("Minuten");
   private final JLabel SEKUNDEN=new JLabel("Sekunden");


   public Oberflaeche(int[] zeit) {
     super("Counter by annica");

     this.zeit=zeit;

      // schliessen-Funktion hinzufuegen
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      // Fenster Groesse setzen
      setSize(230, 150);
      // Fensterplatz setzen
      setLocation(400, 300);

      kreieren();

      // Fenster sichtbar machen
      setVisible(true);
   }

   public void kreieren() {
      Container cp = getContentPane();
      cp.setLayout(null);

      STUNDE.setBounds(5, 5, 286, 30);
      cp.add(STUNDE);
      stunde.setBounds(5, 25, 286, 30);
      cp.add(stunde);

      MINUTE.setBounds(60, 5, 286, 30);
      cp.add(MINUTE);
      minute.setBounds(60, 25, 286, 30);
      cp.add(minute);

      SEKUNDEN.setBounds(110, 5, 286, 30);
      cp.add(SEKUNDEN);
      sekunde.setBounds(110, 25, 286, 30);
      cp.add(sekunde);

      TAG.setBounds(5, 55, 200, 25);
      cp.add(TAG);
      tag.setBounds(5, 75, 200, 25);
      cp.add(tag);


      MONAT.setBounds(40, 55, 200, 25);
      cp.add(MONAT);
      monat.setBounds(40, 75, 200, 25);
      cp.add(monat);

      JAHR.setBounds(90, 55, 200, 25);
      cp.add(JAHR);
      jahr.setBounds(90, 75, 200, 25);
      cp.add(jahr);

      JAHR.setFont( new Font("Georgia", Font.BOLD, 15) );
      JAHR.setForeground(Color.magenta);
   }

   public void zeit(){
      Counter count = new Counter(this.zeit);
      int[] bis_dato = count.wielangenoch();
      tag.setText(""+bis_dato[0]);
      monat.setText(""+bis_dato[1]);
      jahr.setText(""+bis_dato[2]);
      stunde.setText(""+bis_dato[3]);
      minute.setText(""+bis_dato[4]);
      sekunde.setText(""+bis_dato[5]);
   }


}
```


```
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class ZielDatum extends JFrame{

   private JTextField tag = new JTextField();
   private JTextField monat = new JTextField();
   private JTextField jahr = new JTextField();
   private JTextField sekunde = new JTextField();
   private JTextField stunde = new JTextField();
   private JTextField minute = new JTextField();


   private final JLabel TAG=new JLabel("Tag");
   private final JLabel MONAT=new JLabel("Monat");
   private final JLabel JAHR=new JLabel("Jahr");
   private final JLabel SEKUNDE=new JLabel("Sekunde");
   private final JLabel MINUTE=new JLabel("Minute");
   private final JLabel STUNDE=new JLabel("Stunde");

   private JButton zeit= new JButton("Countdown");

   private Thread thread = new Thread(new Runnable(){

    public void run()
    {

      int zeit[]=new int [6];
      zeit[0]=Integer.parseInt(tag.getText());
      zeit[1]=Integer.parseInt(monat.getText());
      zeit[2]=Integer.parseInt(jahr.getText());
      zeit[3]=Integer.parseInt(stunde.getText());
      zeit[4]=Integer.parseInt(minute.getText());
      zeit[5]=Integer.parseInt(sekunde.getText());

      //das alte fenster abschießen
      dispose();

      //die neue oberfläche erzeugen
      Oberflaeche ober = new Oberflaeche(zeit);




        // ENDLOSSCHLEIFE
         while(true){
            ober.zeit();
            repaint();

            try
            {
              Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
         }
    }

   });

   public ZielDatum() {

     super("Counter by annica");
     // schliessen-Funktion hinzufï¿½gen
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      // Fenster Groesse setzen
      setSize(230, 200);
      // Fensterplatz setzen
      setLocation(400, 300);

      kreieren();

      // Fenster sichtbar machen
      setVisible(true);
   }

   public void kreieren() {
      Container cp = getContentPane();
      cp.setLayout(null);

      tag.setBounds(35, 75, 30, 30);
      cp.add(tag);
      TAG.setBounds(35, 50, 30, 30);
      cp.add(TAG);

      monat.setBounds(80, 75, 30, 30);
      cp.add(monat);
      MONAT.setBounds(80, 50, 40, 30);
      cp.add(MONAT);

      jahr.setBounds(125, 75, 60, 30);
      cp.add(jahr);
      JAHR.setBounds(125, 50, 30, 30);
      cp.add(JAHR);

      stunde.setBounds(35, 25, 30, 30);
      cp.add(stunde);
      STUNDE.setBounds(35, 0, 50, 30);
      cp.add(STUNDE);

      minute.setBounds(80, 25, 30, 30);
      cp.add(minute);
      MINUTE.setBounds(80, 0, 50, 30);
      cp.add(MINUTE);

      sekunde.setBounds(125, 25, 30, 30);
      cp.add(sekunde);
      SEKUNDE.setBounds(125, 0, 50, 30);
      cp.add(SEKUNDE);

      zeit.setBounds(35, 120, 150, 25);
      zeit.setText("Countdown starten");
      cp.add(zeit);
      zeit.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent evt) {
            thread.run();
         }
      });

   }


   public static void main(String[] args) {
      ZielDatum ziel= new ZielDatum();
   }
}
```

vielleicht hilft es dir ja weiter


----------



## achim1976 (29. Jul 2008)

die klasse counter hat jetzt erstmal noch ein paar kleine fehler, aber rein vom prinzip her müsste er mir ja di ezeit anzeigen!
wenn ich das mit dem sleep weglasse zeigt er sie mir auch an!


```
package Counter;

import java.text.SimpleDateFormat;
import java.util.*;

public class Counter {
	private int[] date = new int[6];
	final int[] TAGE_DER_MONATE_S = new int[] { 31, 29, 31, 30, 31, 30, 31, 31,
			30, 31, 30, 31 };
	final int[] TAGE_DER_MONATE = new int[] { 31, 28, 31, 30, 31, 30, 31, 31,
			30, 31, 30, 31 };

	public Counter(int[] date) {
		this.date = date;
	}

	public int[] gibaktuellesdatum() {
		int[] datum = new int[6];

		// hier werden nun der reihe nach alle relevanten aktuellen Zeitangaben
		// in ein Array datum gespeichert
		// dd = Tag
		SimpleDateFormat date = new SimpleDateFormat("dd");
		datum[0] = Integer.parseInt(date.format(new Date()));

		// MM = Monat
		date = new SimpleDateFormat("MM");
		datum[1] = Integer.parseInt(date.format(new Date()));

		// yyyy = Jahr
		date = new SimpleDateFormat("yyyy");
		datum[2] = Integer.parseInt(date.format(new Date()));

		// kk = Stunden (kk wegen 24h, sonst hh, dann aber von 0-11)
		date = new SimpleDateFormat("kk");
		datum[3] = Integer.parseInt(date.format(new Date()));

		// mm = Minunten
		date = new SimpleDateFormat("mm");
		datum[4] = Integer.parseInt(date.format(new Date()));

		// ss = Sekunden
		date = new SimpleDateFormat("ss");
		datum[5] = Integer.parseInt(date.format(new Date()));

		return datum;
	}

	public int[] wielangenoch() {
		int tage = 0;
		int[] anz_tage = new int[12];

		int[] zeit = new int[6];
		int[] aktuell = this.gibaktuellesdatum();

		if (zeit[2] % 4 == 0) {
			anz_tage = this.TAGE_DER_MONATE_S;
		} else {
			anz_tage = this.TAGE_DER_MONATE;
		}
		// ich beginne mit den berechnungen der Sekunden, weil das die kleinste
		// Zeiteinheit ist, arbeite mich dann hoch...
		// Sekunden
		zeit[5] = date[5] - aktuell[5];
		if (zeit[5] < 0) {
			zeit[3] -= 1;
			zeit[5] = this.sekunde_sekunde(date[5], aktuell[5]);
		}

		
		
		
		// Minute
		// hier muss überprüft werden ob die Variable negativ wird, weil dann
		// die Zeit anders berechnet wird
		zeit[4] += date[4] - aktuell[4];
		if (zeit[4] < 0) {
			zeit[3] -= 1;

			zeit[4] = this.minute_minute(date[4], aktuell[4]);
		}
		
		// Stunden
		zeit[3] += date[3] - aktuell[3];
		if (zeit[3] < 0) {
			zeit[0] -= 1;
			zeit[3] = this.stunde_stunde(date[3], aktuell[3]);
		}

		

		// Tag
		zeit[0] += date[0] - aktuell[0];
		if (zeit[0] < 0) {
			zeit[1] -= 1;
			zeit[0] = this.tag_tag(date[0], date[1], date[2], aktuell[0]);
		}

		// dann mache ich bei den Monaten weiter...
		// Monat
		zeit[1] += date[1] - aktuell[1];
		if (zeit[1] < 0) {
			zeit[2] -= 1;
			zeit[1] = this
					.monat_monat(date[1], date[2], aktuell[1], aktuell[2]);
		}

		// Jahr
		zeit[2] += date[2] - aktuell[2];

		return zeit;
	}

	/*private int wievielterTagImJahr(int tag, int monat, int jahr) {
		int anzahl = 0;
		int[] anz_tage = new int[12];
		if (jahr % 4 == 0) {
			anz_tage = this.TAGE_DER_MONATE_S;
		} else {
			anz_tage = this.TAGE_DER_MONATE;
		}
		anzahl += tag;

		int zaehler = 0;
		while (zaehler != monat - 1) {
			anzahl += anz_tage[zaehler];
			zaehler++;
		}
		System.out.println(anzahl);
		return anzahl;
	}
	*/

	// die mit -1- am ende gekennzeichneten Variablen geben immer das spätere
	// Datum an, dass mit der -2- am ende stellt das aktuelle dar
	private int tag_tag(int tag1, int monat1, int jahr1, int tag2) {
		//System.out.println("tag1 "+tag1+", monat1 "+monat1+" ,jahr1 "+jahr1+" ,tag2 "+tag2);
		int anz = 0;

		int[] anz_tage1 = this.TAGE_DER_MONATE;
		if (jahr1 % 4 == 0) {
			anz_tage1 = this.TAGE_DER_MONATE_S;
		}
		anz = anz_tage1[monat1 - 1] - tag1 + tag2;
//		System.out.println(anz);
//		System.out.println();
		return anz;
	}

	private int monat_monat(int monat1, int jahr1, int monat2, int jahr2) {
		int anz = 0;
		return anz;
	}

	private int stunde_stunde(int stunde1, int stunde2) {
//		System.out.println("stunde1 "+stunde1 +" stunde2 " +stunde2);
		int anz = 0;
		anz = 24 - stunde2 + stunde1;
//		System.out.println("stunden "+anz);
//		System.out.println();
		return anz;
	}

	private int minute_minute(int minute1, int minute2) {
//		System.out.println("min "+minute1 +" min2 " +minute2);
		int anz = 0;
		anz = 60 - minute2 + minute1;
//		System.out.println("min "+anz);
//		System.out.println();
		return anz;
	}

	private int sekunde_sekunde(int sekunde1, int sekunde2) {
//		System.out.println("sek1 "+sekunde1 +" sek2 " +sekunde2);
		int anz = 0;
		
		anz = 60 - sekunde2 + sekunde1;
//		System.out.println("sek "+anz);
//		System.out.println();
		return anz;
	}
}
```


----------



## Gast2 (29. Jul 2008)

wie gesagt du benutzt nicht deinen eigenen thread dein extends thread macht überhaupt keinen sinn... 
darum solltest du wie oben einen EIGENEN thread machen dann funktioniert auch dein sleep


----------



## achim1976 (29. Jul 2008)

wie gesagt, ich kenn mich damit nicht so gut aus, aber trotzdem danke, ich probier das mal!!! danke


----------



## achim1976 (29. Jul 2008)

also wenn ich deinen code mal kopiert hab läuft es trotzdem noch nicht!
muss ich noch irgendwas schreiben???


----------



## Gast2 (29. Jul 2008)

oben ist ein fehler thread werden mir start() gestartet nicht mit run()


----------



## Gast2 (29. Jul 2008)

schau das müsste gehen schaus dir an wenn du fragen hast dann frag ^^


```
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class ZielDatum extends JFrame{

   private JTextField tag = new JTextField();
   private JTextField monat = new JTextField();
   private JTextField jahr = new JTextField();
   private JTextField sekunde = new JTextField();
   private JTextField stunde = new JTextField();
   private JTextField minute = new JTextField();


   private final JLabel TAG=new JLabel("Tag");
   private final JLabel MONAT=new JLabel("Monat");
   private final JLabel JAHR=new JLabel("Jahr");
   private final JLabel SEKUNDE=new JLabel("Sekunde");
   private final JLabel MINUTE=new JLabel("Minute");
   private final JLabel STUNDE=new JLabel("Stunde");

   private JButton zeit= new JButton("Countdown");

   private Oberflaeche  ober;
   private Counter count;

   public ZielDatum() {

     super("Counter by annica");
     // schliessen-Funktion hinzufï¿½gen
      setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      // Fenster Groesse setzen
      setSize(230, 200);
      // Fensterplatz setzen
      setLocation(400, 300);

      kreieren();

      // Fenster sichtbar machen
      setVisible(true);
   }

   public void kreieren() {
      Container cp = getContentPane();
      cp.setLayout(null);

      tag.setBounds(35, 75, 30, 30);
      cp.add(tag);
      TAG.setBounds(35, 50, 30, 30);
      cp.add(TAG);

      monat.setBounds(80, 75, 30, 30);
      cp.add(monat);
      MONAT.setBounds(80, 50, 40, 30);
      cp.add(MONAT);

      jahr.setBounds(125, 75, 60, 30);
      cp.add(jahr);
      JAHR.setBounds(125, 50, 30, 30);
      cp.add(JAHR);

      stunde.setBounds(35, 25, 30, 30);
      cp.add(stunde);
      STUNDE.setBounds(35, 0, 50, 30);
      cp.add(STUNDE);

      minute.setBounds(80, 25, 30, 30);
      cp.add(minute);
      MINUTE.setBounds(80, 0, 50, 30);
      cp.add(MINUTE);

      sekunde.setBounds(125, 25, 30, 30);
      cp.add(sekunde);
      SEKUNDE.setBounds(125, 0, 50, 30);
      cp.add(SEKUNDE);

      zeit.setBounds(35, 120, 150, 25);
      zeit.setText("Countdown starten");
      cp.add(zeit);
      zeit.addActionListener(new ActionListener() {
        private Thread thread;

        public void actionPerformed(ActionEvent evt) {

           int zeit[]=new int [6];
           zeit[0]=Integer.parseInt(tag.getText());
           zeit[1]=Integer.parseInt(monat.getText());
           zeit[2]=Integer.parseInt(jahr.getText());
           zeit[3]=Integer.parseInt(stunde.getText());
           zeit[4]=Integer.parseInt(minute.getText());
           zeit[5]=Integer.parseInt(sekunde.getText());
           count = new Counter(zeit);
           //das alte fenster abschießen
           dispose();

           //die neue oberfläche erzeugen
            ober = new Oberflaeche(zeit);
            thread = new Thread(new Runnable(){
              private int[] bis_dato;

              public void run()
               {
                   // ENDLOSSCHLEIFE
                    while(true){
                      bis_dato = count.wielangenoch();
                      System.out.println("mhm");
                      SwingUtilities.invokeLater(new Runnable(){

                        public void run()
                        {
                          ober.akutalisieren(bis_dato);
                        }

                      });


                       try
                       {
                         Thread.sleep(1000);
                       }
                       catch (InterruptedException e)
                       {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                       }
                    }
               }

              });
             thread.start();
        }

      });
   }



   public static void main(String[] args) {
      ZielDatum ziel= new ZielDatum();
   }
}
```


```
import com.sun.java.swing.SwingUtilities2;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Oberflaeche extends JFrame{

   private int zeit[] = new int[6];

   private JLabel tag=new JLabel();
   private JLabel monat=new JLabel();
   private JLabel jahr=new JLabel();
   private JLabel stunde=new JLabel();
   private JLabel minute=new JLabel();
   private JLabel sekunde=new JLabel();

   private final JLabel TAG =new JLabel("Tage");
   private final JLabel MONAT =new JLabel("Monate");
   private final JLabel JAHR=new JLabel("Jahre");
   private final JLabel STUNDE=new JLabel("Stunden");
   private final JLabel MINUTE=new JLabel("Minuten");
   private final JLabel SEKUNDEN=new JLabel("Sekunden");

  private Thread thread;

  private Counter count;


   public Oberflaeche(int[] zeit) {
     super("Counter by annica");

     this.zeit=zeit;

      // schliessen-Funktion hinzufuegen
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      // Fenster Groesse setzen
      setSize(230, 150);
      // Fensterplatz setzen
      setLocation(400, 300);

      kreieren();

      // Fenster sichtbar machen
      setVisible(true);
   }

   public void kreieren() {
      Container cp = getContentPane();
      cp.setLayout(null);

      STUNDE.setBounds(5, 5, 286, 30);
      cp.add(STUNDE);
      stunde.setBounds(5, 25, 286, 30);
      cp.add(stunde);

      MINUTE.setBounds(60, 5, 286, 30);
      cp.add(MINUTE);
      minute.setBounds(60, 25, 286, 30);
      cp.add(minute);

      SEKUNDEN.setBounds(110, 5, 286, 30);
      cp.add(SEKUNDEN);
      sekunde.setBounds(110, 25, 286, 30);
      cp.add(sekunde);

      TAG.setBounds(5, 55, 200, 25);
      cp.add(TAG);
      tag.setBounds(5, 75, 200, 25);
      cp.add(tag);


      MONAT.setBounds(40, 55, 200, 25);
      cp.add(MONAT);
      monat.setBounds(40, 75, 200, 25);
      cp.add(monat);

      JAHR.setBounds(90, 55, 200, 25);
      cp.add(JAHR);
      jahr.setBounds(90, 75, 200, 25);
      cp.add(jahr);

      JAHR.setFont( new Font("Georgia", Font.BOLD, 15) );
      JAHR.setForeground(Color.magenta);
   }

   public void akutalisieren(int[] bis_dato)
   {
     tag.setText(""+bis_dato[0]);
     System.out.println(bis_dato[0]);
     monat.setText(""+bis_dato[1]);
     jahr.setText(""+bis_dato[2]);
     stunde.setText(""+bis_dato[3]);
     minute.setText(""+bis_dato[4]);
     sekunde.setText(""+bis_dato[5]);
     repaint();
     validate();
   }


}
```


----------

