从后台线程更新javaFX浏览器内容

时间:2017-07-26 12:34:25

标签: multithreading javafx javafx-webengine

我有一个内置浏览器的Javafx项目。我在浏览器中使用angularJS。当我尝试从后台线程转到新状态时,在我与其中一个按钮交互之前,视图不会执行此操作。因此,角度代码被调用,但视图被冻结,直到点击某些东西。

Task task = new Task<Void>() {
        @Override public Void call() {
            while (true) {
                try {
                    System.out.println("sLEEPING");
                    Thread.sleep(4000);
                    System.out.println("Reloading page");
                    Platform.runLater(() -> {
                        communicator.changeUI();

                    });
                    System.out.println("pAGE Reloaded");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    Thread t = new Thread(task);
    t.start();

1 个答案:

答案 0 :(得分:1)

不要从后台线程更新UI的状态(请参阅documentation中的&#34;线程&#34;部分)。包含实际更改Platform.runLater()中的用户界面的代码(或使用TaskonSucceeded处理程序)。

E.g:

// Runs in some background thread:
public class MyRunnable {

    @Override
    public void run() {
        // long-running code here...

        // to update UI:
        Platform.runLater(() -> {
            // update UI here...
        });
    }
}