【问题标题】:JavaFX refresh view before long taskJavaFX 在长时间任务之前刷新视图
【发布时间】:2014-12-17 11:03:50
【问题描述】:

我必须在 gui 中执行一项长时间运行的任务。 我想在执行此操作时阻止用户输入并使窗口变灰。 为此,我在表单中添加了一个全场景窗格:

<Pane
    visible="false"
    opacity="0.50"
    style="-fx-background-color: gray;"
    fx:id="paneBlocker" />

我打算使用的代码:

private void doLongTask() {
    showBlocker(true); // Shows the blocker pane and blocks the input

    Platform.runLater( () -> {
        longTask();
        otherTaskModifyingGui();
        showBlocker(false); // Hide blocker
    });
}

我认为这将是异步的,所以在 showBlocker 中所做的更改会生效,但它不会。

我还尝试将长任务移动到另一个线程:

private void doLongTask() {
    showBlocker(true);

    new Thread(() -> {
        longTask();

        Platform.runLater(() -> {
        otherTaskModifyingGui();
        showBlocker(false);
        });
    }).run();
}

它也不起作用。 :-(

如何强制 GUI 显示拦截器?

【问题讨论】:

标签: javafx


【解决方案1】:

使用 JavaFX 任务 API:http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

Task 为其生命周期提供了各种钩子,例如

无需拨打Platform.runLater()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2021-07-27
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多