#java #blackberry #timer
#java #ежевика #таймер
Вопрос:
Я пытаюсь использовать время, которое обновляет метку каждую секунду (поэтому он показывает обратный отсчет), но кажется, что оно «тикает» только один раз, и я не могу понять, что я делаю неправильно!
public class Puzzle extends UiApplication {
public static void main(String[] args) {
Puzzle puzzle = new Puzzle();
puzzle.enterEventDispatcher();
}
public Puzzle() {
pushScreen(new PuzzleScreen());
}
}
class PuzzleScreen extends MainScreen {
LabelField timerLabel;
Timer timer;
public static int COUNT = 0;
public PuzzleScreen() {
//set up puzzle
VerticalFieldManager vfm = new VerticalFieldManager();
add(vfm);
timerLabel = new LabelField();
timerLabel.setText("00:20");
vfm.add(timerLabel);
StartTimer();
}
void StartTimer() {
timer = new Timer();
timer.schedule(new TimerTick(), 1000);
}
private class TimerTick extends TimerTask {
public void run() {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
timerLabel.setText((COUNT ) "");
}
});
}
}
Кто-нибудь может увидеть, что я делаю неправильно ..? Все, что происходит, — это то, что для моей метки get установлено значение «0», а затем не изменяется. Я установил точку останова при запуске в классе timer tick, но я не вижу, чтобы она срабатывала!
Bex
Ответ №1:
Вам нужно будет изменить вызов функции schedule () вашего таймера на
timer.schedule(new TimerTick(), 0, 1000);
То, как вы вызываете это прямо сейчас, говорит о том, чтобы запустить его один раз после секундной задержки. Этот способ говорит о необходимости запускать его сейчас и каждую секунду. Вы, вероятно, хотите использовать
timer.scheduleAtFixedRate(new TimerTick(), 0, 1000);
хотя, потому что это гарантирует, что в среднем ваша TimerTask выполняется каждую секунду, а не при обычном вызове schedule (), который говорит, что попытается подождать секунду, а затем выполнить, но он может отстать, если что-то замедлит его. Если scheduleAtFixedRate () задерживается, он выполнит несколько вызовов быстрее, чем с задержкой в 1 секунду, чтобы он мог «наверстать упущенное». Взгляните на http://www.blackberry.com/developers/docs/5.0.0api/java/util/Timer.html#scheduleAtFixedRate(java.util.TimerTask, long, long) для более подробного объяснения.
Комментарии:
1. как только вы опубликовали, что он щелкнул!! Ага! Новичок в Java и пропускаю мои биты c #!! Спасибо!
2. @jprofitt, я хочу вызвать свой метод только один раз, так что это будет инструкция? таймер.расписание(новый TimerTick(), 1000);