java – 停止秒表
我在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(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |