【问题标题】:How can I reset a timer in java?如何在java中重置计时器?
【发布时间】:2015-11-13 17:04:42
【问题描述】:
private void btnGuess1ActionPerformed(java.awt.event.ActionEvent evt) {    
    Timer timer = new Timer();
    TimerTask task = new TimerTask(){
        private int i = 0;
        public void run(){
            if (i <= 20){
                lblTimer.setText("" + i++);
            }
        }
    };
    timer.cancel();
    timer.purge();
    timer = new Timer();
    timer.schedule(task, 1000);

这是我目前所拥有的。当我使用按钮激活这段代码时,计时器永远不会重置。我怎样才能解决这个问题?也没有错误信息。

提前感谢任何帮助。

【问题讨论】:

  • 你期待什么?什么时候应该重置?
  • 当我点击一个按钮时,计时器应该回到 0,然后再次开始计数到 ​​20。
  • 所以你必须在按钮上绑定和事件onclick,并且在代码中你需要有重置代码
  • @DanyalSandeelo 编辑代码。我在网上看了,人们说要重置它,你取消并清除它然后创建一个新的计时器并使用 timer.schedule(task, 1000);重新启动它,但它没有重置:/

标签: java timer timertask netbeans-8


【解决方案1】:

使timer 成为您的类的成员并在构造函数中创建它。您应该在安排新任务之前取消计时器。像这样的:

 private void btnGuess1ActionPerformed(java.awt.event.ActionEvent evt) {    
    timer.cancel();
    TimerTask task = new TimerTask(){
       private int i = 0;
       public void run(){
       if (i <= 20){
         lblTimer.setText("" + i++);
      }
    }
};
timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 1000);

【讨论】:

  • 我在执行此操作时收到一条错误消息,提示计时器已取消
  • 创建一个新的计时器对象。查看修改后的代码。并在取消之前检查timer == null 是否从构造函数中删除计时器创建。
  • 现在定时器卡在0
  • 您应该使用scheduleAtFixedRate 而不是schedule。看java文档。
  • 哦,好吧,它又开始工作了,刚才好像以前的计时器没有停止。所以现在有 2 个计时器在运行,因此标签可以打开 1 个计时器,它会设置文本,然后第二个计时器同时也在为其设置文本。
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 2010-11-05
  • 2020-11-14
  • 2013-11-26
  • 2013-11-06
  • 2021-03-11
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多