Приложение мигает черным цветом при смене узла на BorderPane (setCeter) на окнах, но не на Mac - PullRequest
0 голосов
/ 16 октября 2019

Так что в этом приложении. Я использую встроенный браузер Chrome (JxBrowser) для отображения веб-страницы. Я хочу отобразить экран загрузки, когда браузер не завершил загрузку / загрузку всех файлов для отображения веб-страницы.

У меня 2 просмотра браузера. Один для основного браузера (BrowserViewMain), а второй только для отображения локального HTML (BrowserViewLoading) для экрана загрузки.

Чтобы определить, начал ли браузер загружать веб-страницу, я использую событие JxBrowser navigation.on(NavigationStarted.class), а также проверьте, если !event.isSameDocument(), и если да, я делаю BorderPane.setCenter(BrowserViewLoading).

. Чтобы определить, завершил ли браузер загрузку веб-страницы, я использую navigation.on(LoadFinished.class), и я также создаю таймер для переадресации/ перенаправить и сделать переход более плавным. Он ждет 800 мс, и если событие не вызывается снова, выполните BorderPane.setCenter(BrowserViewMain), чтобы отобразить основной браузер.

Переход работает отлично при тестировании на Mac. Вызов setCenter выполняет переход белого цвета, но на окнах он мигает черным в течение короткого периода времени.

Есть ли способ скопировать поведение mac на окнах?

Есть ли лучший способ сделать это?

Я попытался использовать стек стека и добавить 2 просмотра браузера и вызвать для них toFront() и toBack(), но он не работает должным образом.

@FXML private BorderPane fullScreen;

navigation.on(NavigationStarted.class, event -> {
    if(!event.isSameDocument()){

        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                fullScreen.setCenter(BrowserViewLoading);
                return;
            }
        });

    }
});

navigation.on(LoadFinished.class, event -> {
    if (BrowserViewLoading.isVisible()){

        try{
            timer.get().cancel();
            timer.set(new Timer());
        } catch (Exception e) {
        }
        timer.get().schedule(
            new TimerTask(){
                @Override
                public void run() {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        fullScreen.setCenter(BrowserViewMain);
                        return;
                    }
                });
                }
            },
                800
        );

    }
}
...