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 в другом потоке я получаю.
теперь, я полностью Мисс-понимание темы и как это будет работать? Или я чего-то не хватает?
ошибка:
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