Java-таймер обратного отсчета без GUI

в основном я делаю текстовую "игру" (не столько игру, сколько способ улучшить основные навыки и логику java). Однако, как часть этого я хочу иметь таймер. Он будет отсчитывать время, которое я хочу от переменной до 0. Теперь, я видел несколько способов сделать это с gui, однако, есть ли способ сделать это без gui/jframe и т. д.

Итак, что мне интересно. Можете ли вы сделать обратный отсчет от x до 0 без использования gui / jframe. Если да, то как бы вы поступили это?

спасибо, как только у меня будут некоторые идеи, я буду редактировать с прогрессом.

редактировать

// Start timer
Runnable r = new TimerEg(gameLength);
new Thread(r).start();

выше, как я вызываю поток / таймер

public static void main(int count) {

если у меня есть это в классе TimerEg, таймер соответствует. Однако при компиляции main в другом потоке я получаю.

Error

теперь, я полностью Мисс-понимание темы и как это будет работать? Или я чего-то не хватает?

ошибка:

constructor TimerEg in class TimerEg cannot be applied to given types;
required: no arguments; found int; reason: actual and formal arguments differ in length

в строке Runnable r = new TimerEg(gameLength);

2 ответов


Так же, как с GUI, вы бы использовали таймер, но здесь вместо использования таймера Swing вы бы использовали java.утиль.Таймер. Взгляните на таймер API за подробностями. Также посмотрите на TimerTask по API так как вы будете использовать это в сочетании с вашим таймером.

например:

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

public class TimerEg {
   private static TimerTask myTask = null;
   public static void main(String[] args) {
      Timer timer = new Timer("My Timer", false);
      int count = 10;
      myTask = new MyTimerTask(count, new Runnable() {
         public void run() {
            System.exit(0);
         }
      });

      long delay = 1000L;
      timer.scheduleAtFixedRate(myTask, delay, delay);
   }
}

class MyTimerTask extends TimerTask {
   private int count;
   private Runnable doWhenDone;

   public MyTimerTask(int count, Runnable doWhenDone) {
      this.count = count;
      this.doWhenDone = doWhenDone;
   }

   @Override
   public void run() {
      count--;
      System.out.println("Count is: " + count);
      if (count == 0) {
         cancel();
         doWhenDone.run();
      }
   }

}

вы могли бы написать свой собственный таймер обратного отсчета, как:

public class CountDown {
    //Counts down from x to 0 in approximately
    //(little more than) s * x seconds. 
    static void countDown(int x, int s) {
        while (x > 0 ) { 
            System.out.println("x = " + x); 
            try {
                Thread.sleep(s*1000);
            } catch (Exception e) {}
            x--;
        }   
    }

    public static void main(String[] args) {
        countDown(5, 1); 
    }   
}

или вы можете использовать Java Timer API