长期任务之前的JavaFX刷新视图

时间:2014-12-17 11:03:50

标签: javafx

我必须在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显示阻止程序?

1 个答案:

答案 0 :(得分:1)

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

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

无需Platform.runLater()次来电。