Ежевичный таймер не стреляет TimerTask - PullRequest
2 голосов
/ 19 апреля 2011

Я пытаюсь использовать время, которое обновляет метку каждую секунду (поэтому он показывает обратный отсчет), но кажется, что оно «тикает» один раз, и я не могу понять, что я делаю неправильно!

   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++) + "");
            }

        });
    }
}

Кто-нибудь может увидеть, что я делаю неправильно?Все, что происходит, это то, что мой ярлык получает значение «0», а затем не меняется.Я установил точку останова на ходу в классе тиковых таймеров, но не вижу его срабатывания!

Bex

1 Ответ

2 голосов
/ 19 апреля 2011

Вам необходимо изменить вызов расписания вашего Timer () на

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,%20long,%20long) для более подробного объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...