首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从线程Java 8更新Javafx UI

从线程Java 8更新Javafx UI
EN

Stack Overflow用户
提问于 2017-05-29 09:37:29
回答 1查看 2.2K关注 0票数 1

我对一项有趣的任务感兴趣。我在JavaFx中有UI和另一个更新UI的线程。我从Platform.runLater开始更新。代码:

代码语言:javascript
复制
private void startUpdateDaemon() {
    updateUserStatus();
    updateTable();
}

private void startUpdateDaemonTask() {
    Task task = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            while (true) {
                Platform.runLater(() -> {
                    startUpdateDaemon();
                });
                Thread.sleep(1000);
            }
        }
    };
    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
}

@Override
public void initialize(URL location, ResourceBundle resources) {
    startUpdateDaemonTask();
}

此外,我还可以在另一个类中更新UI:

代码语言:javascript
复制
private void startUpdateDaemonTask() {
    Task task = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            while (true) {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        updateGameStatus();
                    }
                });
                Thread.sleep(1000);
            }
        }
    };

    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
}

最后,我有两个地方叫做"Platform.runLater“,里面有不同的方法。我的问题是,我是否可以用一次调用"Platform.runLater“来创建”一个“方法,并将不同的方法发送给这个方法?我是否可以与消费者一起编写finish方法,并向他发送方法'startUpdateDaemon()‘和'updateGameStatus()'?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-29 10:43:45

可以向方法中添加Runnable参数。这个参数给您Platform.runLater

代码语言:javascript
复制
private void startUpdateDaemonTask(Runnable runner) {
    Task task = new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            while (true) {
                Platform.runLater(runner);
                Thread.sleep(1000);
            }
        }
    };

    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
}

现在,您可以使用方法引用来调用此方法:

代码语言:javascript
复制
startUpdateDaemonTask(this::startUpdateDaemon);
startUpdateDaemonTask(this::updateGameStatus);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44239194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档