加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 停止秒表

发布时间:2020-12-15 05:16:15 所属栏目:Java 来源:网络整理
导读:我在JPanel类中有以下代码,它被添加到另一个类(JFrame)中.我正在尝试实施的是某种秒表计划. startBtn.addActionListener(new startListener());class startListener implements ActionListener { public void actionPerformed(ActionEvent e) { Timer time =
我在JPanel类中有以下代码,它被添加到另一个类(JFrame)中.我正在尝试实施的是某种秒表计划.

startBtn.addActionListener(new startListener());

class startListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        Timer time = new Timer();
        time.scheduleAtFixedRate(new Stopwatch(),1000,1000);
    }
}

这是另一个基本上是任务的课程.

public class Stopwatch extends TimerTask {

    private final double start = System.currentTimeMillis();

    public void run() {
        double curr = System.currentTimeMillis();
        System.out.println((curr - start) / 1000);
    }
}

计时器工作正常,这肯定远未完成,但我不知道如何编码应该停止计时器的停止按钮.有什么建议吗?顺便说一下,我正在使用java.util.timer

编辑:我希望能够在停止后再次启动它(没有重置计时器)

解决方法

您可以通过调用Timer.cancel()取消整个Timer,也可以通过调用TimerTask.cancel()来取消单个任务.

无论哪种方式,您都需要在创建时保留对计时器和/或任务实例的引用,以便您的停止例程可以调用相应的cancel方法.

更新:

所以你有效地希望能够暂停计时器?我认为这不受java.util.Timer中标准接口的支持.您可以通过向自定义任务添加pause()方法(或类似方法),记录截至该点的已用时间,并在再次单击开始按钮时重新开始计数.请注意,使用此技术,在完成完成之前,您不会停止计时器任务.它仍然在后台运行,但是当秒表已经启动并且正在“运行”时(即某种标志指示秒表的状态),你只对它做任何事情.

几个笔记:

> java.util.Timer在非EDT线程上运行,因此如果您在计时器和Swing操作事件中与成员变量进行交互,则需要适当地处理多个线程的含义.可能值得调查javax.swing.Timer,它将在EDT上触发事件.>另外,如果你想要一个超级精确的秒表,你可以考虑使用System.nanoTime()而不是currentTimeMillis().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读