找到挥杆计时器已运行多长时间

时间:2014-02-25 20:32:30

标签: java swing timer

我正在制作一个秒表,我知道如何做所有事情,除了查看我的计时器对象已经运行了多长时间。是否有类似timer.getElapsedTime()的方法或某种性质的方法?

编辑:有数字说00 00 00.每秒需要增加。我的思考过程是seconds = timer.getElapsedTime(); secs.setText(seconds)

2 个答案:

答案 0 :(得分:1)

在设置计时器时,只需将System.currentTimeMillis()保存在某个变量中,并在需要经过时间时将该值与当前返回值进行比较。

编辑:让计时器每秒触发一次。请注意,我们每次触发时都会重新设置计时器,以防止滞后和处理时间累积。

package timertest;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class TimerTest implements ActionListener {

    JLabel timeDisplay;
    long startTime;
    Timer timer;
    int seconds;

    public void createAndShowGUI()  {
        JFrame frame=new JFrame("Stopwatch");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        timeDisplay=new JLabel("0");
        frame.getContentPane().add(timeDisplay);
        frame.pack();
        frame.setVisible(true);

        startTime=System.currentTimeMillis();
        seconds=1;
        timer=new Timer(1000, this);
        timer.setRepeats(false);
        timer.start();
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TimerTest().createAndShowGUI();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        long now=System.currentTimeMillis();
        long elapsed=now-startTime;
        seconds++;
        timeDisplay.setText(elapsed+" Milliseconds since start");
        timer.setInitialDelay((int)(startTime+seconds*1000-now));
        timer.start();
    }
}

答案 1 :(得分:1)

您可以制作自己的计时器课程。 (或者继承当前的计时器类并添加此功能)

public class Timer
{
    private long startTime = 0;

    public void start()
    {
        startTime = System.currentTimeMillis();
    }

    public int getElapsedTime() 
    {
        return (System.currentTimeMillis() - startTime) / 1000 //returns in seconds
    }
}