Таймер Swing более или менее выполнит свою работу, но он может быть несколько неточным. На самом деле, неточность может быть заметна. Например, если вы сделаете свой таймер с помощью Swing Timer, а затем будете наблюдать за числами, которые они показывают, вы можете заметить, что это не всегда точно секунда между тиками. Другими словами, разрешение таймера не так уж велико.
Альтернативой таймеру качания является System.nanoTime()
. Я всегда использую это. У него гораздо лучшее разрешение. Возвращает текущее системное время в нано секундах как длинное.
Вот краткий пример того, как вы можете использовать это для подсчета секунд:
long previousTime = 0L;
int seconds = 0;
while(true)
{
long currTime = System.nanoTime();
if((currTime - previousTime) / 1000000000L >= 1L)
{
previousTime = currTime;
seconds++;
System.out.println("Seconds: " seconds)
}
}