我正在尝试使用每秒更新标签的时间(因此它显示倒计时),但它只是 似乎“滴答作响”一次,我无法弄清楚我做错了什么!
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”然后不会改变。我已经在计时器刻度类中运行了一个断点,但是我没有看到它被触发!
贝克斯
答案 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)以获得更详细的解释。