Java Timer过期时启动Java Timer new

时间:2014-06-07 10:05:33

标签: java timer

所以基本上我试图通过编写基于圆形的游戏

来回到Java

直到现在你只能按下按钮(x)

开始新一轮
if (x.getKeyChar() == 'o') {      

            TimerRounds.cancel();
            // methods to start the next round //
            TimerRounds = new Timer();
            // Timer Method
            Timer Rounds.schedule(new TimerTask() {
                public void run() {
                    System.out.println("Time is over, next round is started");
                 //methods to start the next round //
                  //Timer has to start from the beginning again//
                     //already tried to start the timer here, didn´t work//
                }
            }, 3000);

让我解释一下代码:如果玩家按下o,则开始新一轮,然后轮到下一个玩家。但是,除此之外,每轮都有一个倒计时,如果倒计时到期,新一轮将自动开始

我设法做了所有事情,但我不明白的是以下问题: 计时器结束,新一轮开始,但我如何管理它自动启动下一轮的新计时器?直到现在它只在按下键时才会这样做,但是我希望它在上一轮的倒计时到期时启动一个新的计时器。

我希望你得到问题,我的英语非常糟糕 得到一些建议会很棒

2 个答案:

答案 0 :(得分:1)

你应该分开你的代码的三个问题:你的实际转弯结构,转弯可以结束,新的转弯可以开始,游戏的用户界面,他可以按下按钮,以及游戏的计时逻辑。

在你的回合结构类中,你将有一个startNextTurn方法取消一个可能的挂起计时器并启动一个新计时器。在您的用户界面类中,您将调用该方法 - 不要在用户界面中执行计时器逻辑,让转弯结构执行此操作。

不是直接使用Timer,而是将其封装到提供两种方法的类中:cancelTimerstartTimer;计时器关闭会调用startNextTurn。根据您的需要,您甚至可以将它们组合成restartTimer方法。

在设计这些抽象单元时,请考虑以下问题:什么样的数据和逻辑属于一起?操作必须做什么才能完成?例如,只有在启动定时器时才开始新的转弯,因此需要通过方法封装,并且触发新转弯的两个事件(用户输入和定时器)将重复使用相同的逻辑。

答案 1 :(得分:0)

您可能希望查看Timer的{​​{3}}。这将让您安排重复任务