猿问

JavaFX周期性后台任务

JavaFX周期性后台任务

我尝试周期性地在JavaFX应用程序后台线程中运行,这会修改一些GUI属性。

我想我知道怎么用TaskService来自javafx.concurrent如果不使用Thread#sleep()方法。如果我能用一些Executor从…Executors制作方法(Executors.newSingleThreadScheduledExecutor())

我试着跑Runnable每5秒,就会重新开始javafx.concurrent.Service但它马上就挂起来了service.restart甚至service.getState()叫做。

所以最后我用Executors.newSingleThreadScheduledExecutor(),它会引发我的Runnable每隔5秒Runnable运行另一个Runnable使用:

Platform.runLater(new Runnable() {
 //here i can modify GUI properties}

它看起来很恶心:(有没有更好的方法TaskService上课?


绝地无双
浏览 904回答 3
3回答

呼唤远方

下面是使用Java 8和ReactFX。假设您希望定期重新计算Label.textProperty().Label&nbsp;label&nbsp;=&nbsp;...;EventStreams.ticks(Duration.ofSeconds(5))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;emits&nbsp;periodic&nbsp;ticks &nbsp;&nbsp;&nbsp;&nbsp;.supplyCompletionStage(()&nbsp;->&nbsp;getStatusAsync())&nbsp;//&nbsp;starts&nbsp;a&nbsp;background&nbsp;task&nbsp;on&nbsp;each&nbsp;tick &nbsp;&nbsp;&nbsp;&nbsp;.await()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;emits&nbsp;task&nbsp;results,&nbsp;when&nbsp;ready &nbsp;&nbsp;&nbsp;&nbsp;.subscribe(label::setText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;performs&nbsp;label.setText()&nbsp;for&nbsp;each&nbsp;resultCompletionStage<String>&nbsp;getStatusAsync()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;CompletableFuture.supplyAsync(()&nbsp;->&nbsp;getStatusFromNetwork());}String&nbsp;getStatusFromNetwork()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...}与Sergey的解决方案相比,您没有将整个线程专用于从网络获取状态,而是使用共享线程池。
随时随地看视频慕课网APP

相关分类

Java
我要回答