Как использовать функцию ожидания / сна для отображения обратного отсчета - PullRequest
1 голос
/ 04 января 2012

Я хочу, чтобы моя программа запускалась с использованием таймера обратного отсчета, который будет отображаться пользователю.Единственный способ, которым я могу думать, это сделать label.setText () и Thread.sleep ().Я пробовал около 20 минут, пытаясь заставить его работать, но, похоже, не взломать его.Помощь

Ответы [ 2 ]

1 голос
/ 04 января 2012

Я бы не рассчитывал на точность Thread.sleep, но:

for(int i = 20; i >= 0; i--) {
   label.setText(i + " seconds remaining");
   Thread.sleep(1000);
}

Это, конечно, заблокирует поток пользовательского интерфейса во время сна, поэтому вам, вероятно, нужно запустить его на отдельномнить.Это означает, что вам понадобится что-то вроде SwingUtilities.InvokeLater для обновления пользовательского интерфейса, поскольку вы используете поток, отличный от пользовательского интерфейса:

for(int i = 20; i >= 0; i--) {
   SwingUtilities.InvokeLater(new Runnable() {
         public void run() {
             label.setText(i + " seconds remaining");
         }
       });
   Thread.sleep(1000);
}
1 голос
/ 04 января 2012

Используйте Таймер Swing . По сути, вы создаете класс, который реализует ActionListener, создаете javax.swing.Timer, и метод actionPerformed для ActionListener вызывается с указанным интервалом. В вашем методе actionPerformed проверьте время и обновите значение, которое будет отображаться при необходимости, и вызовите repaint(). Используйте интервал 0,1 секунды, и ваш обратный отсчет будет плавным и достаточно точным.

...