# JAVA Countdown



## Tacofan (13. Mai 2016)

Hallo,

ich brauche ein Countdown.
Dieser soll einfach für 5 Sekunden ein GIF anzeigen und danach soll das GIF "entfernt" werden.
Habe den Code bis jetzt so:


```
for(int i =60; i>0;i--)
{
thread.sleep(1000);
system.out.println(i);
}
lbGIF.setVisible(false);
```

leider "hängt" das GIF dann es bewegt sich nicht...
Weiß jemand wie ich das hier lösen kann?


----------



## dayaftereh (13. Mai 2016)

Mmh, schätze mal du führst diesen Code im ActionPerform vom Button aus? Kannst du ein wenig mehr Code Posten ?


----------



## Joose (13. Mai 2016)

Dein "sleep" blockiert wahrscheinlich den UI Thread, daher ändert sich dein gif nicht.
Solche Sachen sollte man immer entsprechend in Threads auslagern, damit man eben den UI Thread nicht blockiert.


----------



## Tacofan (13. Mai 2016)

Ja, genau. Habe es mal in einen Button rein gemacht.
Da ich eigentlich möchte das die GUI sich direkt am Anfang öffnet und gleichzeitig das GIF abgespielt wird und nach dem Countdown das GIF verschwindet.

Wenn ich es aber direkt am Anfang mache kommt erst der Countdown und danach öffnet sich erst die GUI.

Kannst du mir sagen was ich anders machen muss/soll?:/


----------



## Joose (13. Mai 2016)

Wie schon gesagt du musst den einen Teil in einen anderen Thread auslagern.


----------



## Tacofan (13. Mai 2016)

Joose hat gesagt.:


> Wie schon gesagt du musst den einen Teil in einen anderen Thread auslagern.




Kannst du mir sagen wie man sowas macht?


----------



## Joose (13. Mai 2016)

Hier ein simples Beispiel: http://stackoverflow.com/questions/...erform-long-running-operation-outside-the-edt
Ansonsten schau dir einfach mal ein paar Thread Beispiele an und probiere ein bisschen herum, dann wirst du selber merken wie was möglich ist.


----------



## Tacofan (13. Mai 2016)

```
btTest = new JButton("New button");
        btTest.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                public class TimeCounter
                {
                static Thread thread = new Thread();
                public void main(String args[]) throws InterruptedException
                {
                for(int i =60; i>0;i--)
                {
                thread.sleep(1000);
                System.out.println(i);
                }
                }

                }
            }
        });
        btTest.setBounds(339, 365, 89, 23);
        contentPane.add(btTest);
```

Habe das mal so probiert o.o 
Aber was ist falsch? Alles?


----------



## Joose (13. Mai 2016)

Tacofan hat gesagt.:


> Aber was ist falsch? Alles?


Ist es falsch? Was würdest du denn erwarten das nun passiert? Was passiert stattdessen?
Bitte konkrete Beschreibungen liefern und ebenso konkrete Fragen stellen. 

Du erzeugst einen neuen MouseListener für deinen Button. Dieser Listener hat selbst aber keine Funktionalität.
Du hast da zwar Code geschrieben, aber du hast einfach nur eine Klasse deklariert mit einen Thread Object und einer main-Methode, fertig von diesem Code wird nichts ausgeführt
Keine Ahnung warum du hier eine neue Klasse deklarierst und eine main-Methode.


----------



## Tacofan (13. Mai 2016)

```
btTest = new JButton("New button");
        btTest.addMouseListener(new MouseAdapter() {
            @SuppressWarnings("static-access")
            @Override
            public void mouseClicked(MouseEvent e)
            {

                Thread thread = new Thread();

               
                for(int i =60; i>0;i--)
                {
                try
                {
                    thread.sleep(1000);
                }
                catch (InterruptedException e1)
                {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                System.out.println(i);
                }       
            }
```


Habe es so gemacht.

Aber der Countdown läuft noch immer runter und erst dann kann man was wieder machen


----------



## Joose (14. Mai 2016)

Du erstellst hier einfach nur ein Thread Objekt und das wars.
Danach läuft eine Schleife welche nicht viel macht. Wo startest du zum Beispiel den Thread?

Bitte schau dir das Beispiel in dem von mir geposteten Link genau an! Du implementierst nirgends das Runnable Interface (so wie im Beispiel).


----------

