黑莓计时器不会触发TimerTask

时间:2011-04-19 16:26:24

标签: java blackberry timer

我正在尝试使用每秒更新标签的时间(因此它显示倒计时),但它只是 似乎“滴答作响”一次,我无法弄清楚我做错了什么!

   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”然后不会改变。我已经在计时器刻度类中运行了一个断点,但是我没有看到它被触发!

贝克斯

1 个答案:

答案 0 :(得分:2)

您需要将Timer的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,%20long,%20long)以获得更详细的解释。