Обновление содержимого браузера javaFX из фонового потока

У меня есть проект 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();

person Irakli Kobalava    schedule 26.07.2017    source источник


Ответы (1)


Не обновляйте состояние пользовательского интерфейса из фонового потока (см. раздел «Threading» в документе документация). Оберните код, который фактически изменяет пользовательский интерфейс, в Platform.runLater() (или используйте Task и обработчик onSucceeded).

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...
        });
    }
}
person James_D    schedule 26.07.2017
comment
Я добавил свой код, я использую Platform.runLater(), но представление все еще ожидает щелчка. Я подумал, может быть, мне нужно сказать браузеру сделать какое-то обновление? не фактическая перезагрузка - person Irakli Kobalava; 26.07.2017