2016-05-30 10 views
2

Ich möchte jede Sekunde herunterzählen und den Etikettentext aktualisieren?Wie Countdown-Timer in Java zu machen?

int countdown = 100; 

public void countingDown() { 
    countdown = countdown - 1; 
    label.setText(countdown + "second's left"); 
} 

so wie pro Sekunde countingDown laufen?

Antwort

1

Sie mögen dies tun können:

package com.example; 

import java.util.Timer; 
import java.util.TimerTask; 

public class MyTimer { 

    public static void main(String[] args) { 
     Timer timer = new Timer(); 
     timer.schedule(new App(), 0, 1000); 
    } 
} 

class App extends TimerTask { 

    int countdown = 100; 

    public void run() { 
     countdown = countdown - 1; 
     System.out.println(countdown); 
     //label.setText(countdown +"second's left"); 
    } 

} 

// Result: 
//99 
//98 
//97 
//96 
//95 
//94 

Es funktioniert einfach. Ändern Sie System.out.println(countdown); von label.setText(countdown +"second's left"); als was Sie wollen.

Referenz
http://docs.oracle.com/javase/8/docs/api/index.html?java/util/TimerTask.html
http://docs.oracle.com/javase/8/docs/api/index.html?java/util/Timer.html

+0

ja es funktioniert dank dovy. – mow

+0

'timer.schedule (neue App(), 0, 1000);' 1000 ist Stoppzeit (= 1 Sekunde). Wenn du 2,5 Sekunden willst, ändere es in 'timer.schedule (new App(), 0, 2500);' –

+0

Wenn ich den Timer stoppen will, wenn es Countdown erreicht 0 – mow

-1

Versuchen Sie, diese

int countdown=100; 

    public void countingDown(){ 

    new Timer().schedule(new TimerTask(){ 

      @Override 
      public void run() { 
      countdown=countdown - 1; 

       label.setText(countdown +"second's left"); 
      } 
     },0, 1000); 
    } 
+0

es der Timer nicht funktionierte die Aktualisierung nicht. – mow

+0

Call countingDown() einmal, es funktioniert auf meinem Rechner –

+0

ja ich tat, aber ist nur einmal aktualisieren, es stoppen 99 – mow

0

Sie den Code unten vielleicht

final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
     final Runnable refresh = new Runnable() { 
      public void run() { 
       //countingDown stuff; 
      } 
     }; 
scheduler.scheduleAtFixedRate(refresh, 0, 1,SECONDS); 
+0

zeigt mir Fehler scheduler.scheduleAtFixedRate (aktualisieren, 0, 1, Sekunden); – mow

+0

Muss dies nicht in den Swing UI-Thread integriert werden? – Thilo

+0

Es sollte 'scheduler.scheduleAtFixedRate (aktualisieren, 0, 1, Timer.SECONDS);' – Saravana

Verwandte Themen