gpt4 book ai didi

java - 黑莓定时器不触发 TimerTask

转载 作者:行者123 更新时间:2023-11-30 09:49:35 27 4
gpt4 key购买 nike

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

   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”,然后没有改变。我在计时器滴答类中的运行中放置了一个断点,但我没有看到它触发!

行为

最佳答案

您需要将定时器的 schedule() 调用更改为

timer.schedule(new TimerTick(), 0, 1000);

您现在调用它的方式是说在第二次延迟后运行一次。这种方式表示现在和每秒运行它。你可能想使用

timer.scheduleAtFixedRate(new TimerTick(), 0, 1000); 

尽管如此,因为它会确保您的 TimerTask 平均每秒运行一次,而不是使用正常的 schedule() 调用,后者表示它将尝试等待一秒钟然后执行,但如果某些东西减慢了速度,它可能会落后。如果 scheduleAtFixedRate() 被延迟,它会比 1 秒延迟时更快地进行多次调用,因此它可以“ catch ”。看看http://www.blackberry.com/developers/docs/5.0.0api/java/util/Timer.html#scheduleAtFixedRate(java.util.TimerTask,%20long,%20long ) 以获得更详细的解释。

关于java - 黑莓定时器不触发 TimerTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5719574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com