I have to make a countdown program which also shows the tenths of a second;
for example from a 10.0 second countdown, it should display 9.9s, 9.8s, … 0.0s
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
timer.start();
timer2.start();
}
Double timeLeft=5000; //5 seconds
Timer timer=new Timer(1,countDown);
Timer timer2=new Timer(1000,countDown2);
ActionListener countDown=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
timeLeft--;
SimpleDateFormat df=new SimpleDateFormat("mm:ss:S");
jLabel1.setText(df.format(timeLeft));
if(timeLeft<=0)
{
timer.stop();
}
}
};
what happens is it's taking more than 5 seconds to finish the 5 seconds.
I compared the code above with another Timer
int timeLeft2=5;
ActionListener countDown2=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
timeLeft2--;
jLabel2.setText(String.valueOf(timeLeft2));
if(timeLeft2<=0)
{
time2.stop();
}
}
};
is it natural that they don't get the same?
Best Solution
The time between ticks (the time when
actionPerfomed
is called) is variable, it only guarantees that it will be at leastn
millisecondsInstead of relying on some counter, which could become unreliable over time, you should try and calculate the difference between the time the
Timer
was started and the current time, for example...