JavaFX中的倒数计时器

Ak222:

我想在JavaFX中实现一个计时器,并且遇到了这段代码,但是我不知道将其放在项目文件中的什么位置。这也是实现计时器的正确方法吗?我希望计时器在场景变化时运行。那么,是否将其放在Initializable接口的initialize方法中或其他地方?

final int[] secondsPassed = {0};
    Timer myTimer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            secondsPassed[0]++;
            Platform.runLater(() -> timerLabel.setText(String.valueOf(secondsPassed[0])));
            ;
        }
    };

    myTimer.scheduleAtFixedRate(task,1000,1000);

同样为什么变量secondsPassed成为最终的int数组?

pglez82:

创建场景时执行代码的这种平和性是有意义的。我将其放在initilize()具有的控制器内的方法中timerLabel

在您的代码中,您正在创建一个Timer带有的TimerTask,它将每秒执行一次(1000ms)。此计时器是在不同的线程中执行的,因此您需要使用Platform.runLater它返回UI线程并在界面中执行更改(否则,它将引发错误,因为您无法在UI线程之外修改界面元素)。

最后,变量secondsPassed已声明为,final因为它需要在TimerTask已声明为匿名内部类的变量内部使用(请在此处查看更多信息)。由于数组是最终数组,因此无法对其进行修改。您可以做的是修改其元素。在这种情况下,我们只有一个元素(位置0)用于计数秒数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章