Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java - Countdown timer without GUI

Tags:

java

countdown

Basically I am making a text based "game" (Not so much a game, more of a way to improve basic java skills and logic). However, as part of it I wish to have a timer. It would count down on the time I wish from the variable to 0. Now, I have seen a few ways to do this with a gui, however, is there a way to do this without a gui/jframe etc.

So, what I am wondering is. Can you make a count down from x to 0 without using a gui/jframe. If so, how would you go about this?

Thanks, once I have some ideas will edit with progress.

Edit

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

Above is how I am calling the thread/timer

public static void main(int count) {

If I then have this in the TimerEg class, the timer complies. However, when compiling the main in the other thread I get.

Error

Now, am I completely miss-understanding threads and how this would work? Or is there something I am missing?

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

Found on line Runnable r = new TimerEg(gameLength);

like image 566
Kyle93 Avatar asked Sep 23 '12 20:09

Kyle93


People also ask

Is there a timer in Java?

Java programming language provides a class utility known as Timer Task. It allows one to schedule different tasks. In other words, a task can be executed after a given period or at a specified date and time. A Timer in Java is a process that enables threads to schedule tasks for later execution.

How do you use a swing timer?

Swing timers are very easy to use. When you create the timer, you specify an action listener to be notified when the timer "goes off". The actionPerformed method in this listener should contain the code for whatever task you need to be performed.


1 Answers

Same as with a GUI, you'd use a Timer, but here instead of using a Swing Timer, you'd use a java.util.Timer. Have a look at the Timer API for the details. Also have a look at the TimerTask API since you would use this in conjunction with your Timer.

For example:

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();
      }
   }

}
like image 158
Hovercraft Full Of Eels Avatar answered Sep 20 '22 23:09

Hovercraft Full Of Eels