为了账号安全,请及时绑定邮箱和手机立即绑定

JavaFX周期性后台任务

JavaFX周期性后台任务

绝地无双 2019-05-30 17:32:58
JavaFX周期性后台任务我尝试周期性地在JavaFX应用程序后台线程中运行,这会修改一些GUI属性。我想我知道怎么用Task和Service来自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}它看起来很恶心:(有没有更好的方法Task或Service上课?
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

下面是使用Java 8和ReactFX。假设您希望定期重新计算Label.textProperty().

Label label = ...;EventStreams.ticks(Duration.ofSeconds(5))          // emits periodic ticks
    .supplyCompletionStage(() -> getStatusAsync()) // starts a background task on each tick
    .await()                                       // emits task results, when ready
    .subscribe(label::setText);                    
    // performs label.setText() for each resultCompletionStage<String> getStatusAsync() {
    return CompletableFuture.supplyAsync(() -> getStatusFromNetwork());}String getStatusFromNetwork() {
    // ...}

与Sergey的解决方案相比,您没有将整个线程专用于从网络获取状态,而是使用共享线程池。


查看完整回答
反对 回复 2019-05-30
  • 3 回答
  • 0 关注
  • 878 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号