如何设置响应式计时器?

问题描述

    private int seconds = 5;
    private SpeedMathGo speedMathGo;
    Timer timeRemaining = new Timer();
    TimerTask task = new TimerTask() {
        
        public void run() {
            
            if (speedMathGo.turn == "X") {
                seconds = 5;
                seconds --;
                
                if (seconds == 0) {
                    speedMathGo.turn = "O";
                }
            }
            
            timerLabel.setText("Time remaining: " + seconds + "s");
            
            if (speedMathGo.turn == "O") {
                seconds = 5;
                seconds --;
                
                if (seconds == 0) {
                    speedMathGo.turn = "X";

                }
                }
            
            timerLabel.setText("Time remaining: " + seconds + "s");
        }
    };
    
    public void time() {
        
        timeRemaining.scheduleAtFixedRate(task,5000,1000);
    }

这部分代码用作计时器,给X和O 5分别回答相应的数学问题。为什么运行时没有倒数?如果需要课程的更多部分,我将很乐意提供。

解决方法

对于Swing,您应该使用Swing Timer

  1. 您将需要一个变量remainingSeconds

  2. 您将需要一个Swing计时器,该计时器每秒生成一个事件。

  3. 启动计时器时,您需要将remainingSeconds设置为5并更新显示标签

  4. 每次计时器触发时,您递减remainingSeconds并更新显示标签。

  5. 如果remainingSeconds达到0,则您a)停止计时器,并b)调用“用户无法回答”逻辑

  6. 但是,如果用户确实回答了您,则a)重新启动计时器,b)将remainingSeconds重置为5,使用户有完整的5秒钟的时间来回答,并c)更新显示标签。 / p>

请参阅:https://stackoverflow.com/a/7816604/131872,了解Swing Timer的基本用法,它将在10秒后停止。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...