我想在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数组?
创建场景时执行代码的这种平和性是有意义的。我将其放在initilize()
具有的控制器内的方法中timerLabel
。
在您的代码中,您正在创建一个Timer
带有的TimerTask
,它将每秒执行一次(1000ms)。此计时器是在不同的线程中执行的,因此您需要使用Platform.runLater
它返回UI线程并在界面中执行更改(否则,它将引发错误,因为您无法在UI线程之外修改界面元素)。
最后,变量secondsPassed
已声明为,final
因为它需要在TimerTask
已声明为匿名内部类的变量内部使用(请在此处查看更多信息)。由于数组是最终数组,因此无法对其进行修改。您可以做的是修改其元素。在这种情况下,我们只有一个元素(位置0)用于计数秒数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句