【发布时间】:2018-12-03 04:10:22
【问题描述】:
所以我可以看到几种不同的方法来做我需要的事情,我已经完成了一堆 google/stack 溢出搜索,但找不到我真正想要的东西。我需要运行多个“倒数计时器”。我需要在不同时间同时运行大约 6 个可能最多 10 个倒数计时器。我的主程序上有一个选项卡窗格,其中包含 FXML 并将控制器注入其中。计时器选项卡具有与主程序不同的控制器。
所以我的第一个问题是。由于这个“选项卡”运行在单独的控制器上,但包含在主程序中,它是否运行在单独的应用程序线程上?
这是包含的选项卡 FXML 的示例...
当我按下每个开始按钮时。我可以为每个计时器创建一个Timeline 和KeyFrame。但是,我真的不认为这是最好的方法。特别是一旦您同时运行多达 10 个时间线,并且绝对不是在与主程序分开的应用程序线程上运行时。
我考虑将每个启动请求发送到 ExecutorService 和 newCacheThreadPool 但是我需要能够使用当前剩余时间更新 GUI 上的标签,我知道您不应该使用后台服务执行此操作. Platform.runLater() 也许?
另一个想法是使用java.util.Timer 类中的Timer。但是,当我需要更新 GUI 标签时,我认为这与ExecutorService 存在相同的问题。我也明白Timer 类只创建一个线程并按顺序执行它的任务。所以,这行不通。
或者,我是否应该有一个完整的“CountDown”类,我可以为每个类创建新实例,然后在其中启动新线程。但是,如果我这样做,我如何不断更新 GUI。我仍然需要使用timeline 来轮询 CountDown 类,对吗?所以这会破坏整个事情的目的。
【问题讨论】:
标签: java javafx timer javafx-8 fxml