Java-无GUI的倒计时计时器

Java-无GUI的倒计时计时器,java,countdown,Java,Countdown,基本上,我正在制作一个基于文本的“游戏”(与其说是一个游戏,不如说是一种提高java基本技能和逻辑的方法)。然而,作为它的一部分,我希望有一个计时器。它将倒计时我希望从变量到0的时间。现在,我已经看到了一些使用gui的方法,但是,有没有一种方法可以在没有gui/jframe等的情况下实现呢 所以,我想知道的是。您可以在不使用gui/jframe的情况下从x倒计时到0吗。如果是这样,你会怎么做 谢谢,一旦我有了一些想法,我会继续修改 编辑 // Start timer Runnable r = n

基本上,我正在制作一个基于文本的“游戏”(与其说是一个游戏,不如说是一种提高java基本技能和逻辑的方法)。然而,作为它的一部分,我希望有一个计时器。它将倒计时我希望从变量到0的时间。现在,我已经看到了一些使用gui的方法,但是,有没有一种方法可以在没有gui/jframe等的情况下实现呢

所以,我想知道的是。您可以在不使用gui/jframe的情况下从x倒计时到0吗。如果是这样,你会怎么做

谢谢,一旦我有了一些想法,我会继续修改

编辑

// 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(游戏长度)行中找到

与GUI相同,您将使用计时器,但这里不使用Swing计时器,而是使用java.util.Timer。有关详细信息,请查看。另外,请看一下,因为您会将其与计时器结合使用

例如:

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进行倒计时很简单。

      int minute=10,second=60; // 10 min countdown
      int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
      second--;
      // do something with second and minute. put them where you want.
      if (second==0) {
          second=59;
          minute--;

          if (minute<0) {
              minute=9;
          }
      }
  }
};
new Timer(delay, taskPerformer).start();
int分钟=10秒=60;//10分钟倒计时
int延迟=1000//毫秒
ActionListener taskPerformer=新建ActionListener(){
已执行的公共无效操作(操作事件evt){
第二--;
//用秒和分做点什么,把它们放在你想要的地方。
如果(秒==0){
秒=59;
分钟--;

如果(分钟刚刚看到你的编辑,花了过去20分钟试图弄清楚。谢谢你的例子,我现在就来看看!@Kyle:不客气。另外请注意还有其他方法可以剥这只猫的皮。例如,如果你的目标是按常规计划重复创建和执行线程,请考虑使用。我要如何打发时间呢o运行此程序?请参阅我的编辑以了解我的意思。@Kyle:由于internet防火墙在工作,我看不到您的图像。谢谢,这是否允许我继续执行其他操作或完全停止程序?要继续执行其他操作,您需要在单独的线程中运行倒计时。请阅读一些有关线程的信息。我可以如果你在那之后仍然需要帮助,请帮助。好的,谢谢。我会在看完计时器后查看它们:)你会推荐阅读关于线程的内容来帮助解决这个问题吗?我说我可以让一个线程运行这个线程,让一个线程运行我的其他代码,那么一旦计时器完成,线程就会结束,然后能够触发另一个线程中的代码,这是错误的吗?谢谢,我建议在某个时候阅读关于线程的内容如果不是现在!:)并且您所说的没有错。您的TimerEg构造函数调用需要具有与类的构造函数中定义的参数计数和类型相同的参数计数和类型。@HoverCraftFullOfels,除非我弄错了。
static int gameLength=0;
使用
public static void main(int count){
在TimerEg类中。这就是你的意思吗?错误没有说明静态方法,但表明你使用的构造函数不正确。这就是我在你的帖子中所能说的。我没有看到你的代码。