Как заставить JavaFx WebEngine подробно сообщать об ошибках?

В JavaFx я могу подключить прослушиватель к рабочему процессу загрузки для веб-движка следующим образом:

 webEngine.getLoadWorker().stateProperty().addListener(
      new ChangeListener<Worker.State>() {
      public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) {                               
             System.out.println("webEngine result "+ newState.toString());
      }
  });

Однако, если я попытаюсь загрузить документ по адресу https, например:

https://SomeLocalMachine.com:9443/jts/admin#action=com.ibm.team.repository.manageUsers

все, что я распечатываю на консоли, это:

webEngine result READY
webEngine result SCHEDULED
webEngine result RUNNING
webEngine result FAILED

(Тот же адрес https в Firefox или Chrome дает мне страницу входа)

Кто-нибудь знает, как я могу получить более подробные отчеты из JavaFx WebEngine. Я не хочу просто знать, что это не удалось. Мне нужно знать почему. Я могу догадаться, что моя ошибка связана с SSL/сертификатом/HTTPS, но в настоящее время я совершенно не понимаю, какая часть SSL вызвала ошибку "FAIL"


person Tony Eastwood    schedule 20.03.2013    source источник


Ответы (3)


Вы можете использовать com.sun.javafx.webkit.WebConsoleListener. Недостатком является то, что это внутренний API JRE.

WebConsoleListener.setDefaultListener(new WebConsoleListener(){
    @Override
    public void messageAdded(WebView webView, String message, int lineNumber, String sourceId) {
        System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message);
    }
});
person Marcin Fatyga    schedule 10.06.2016
comment
Этот метод не существует ›= Java 11 - person Steven Spungin; 25.08.2019
comment
какого хрена они убрали это, не добавив соответствующий общедоступный API для работы с консолью? - person Jason S; 19.08.2020

Вы пробовали следующее:

engine.getLoadWorker().exceptionProperty().addListener(new ChangeListener<Throwable>() {
    @Override
    public void changed(ObservableValue<? extends Throwable> ov, Throwable t, Throwable t1) {
        System.out.println("Received exception: "+t1.getMessage());
    }
});
person Warkst    schedule 10.10.2013

Лучшее, что мы когда-либо получали, было:

if (webEngine.getLoadWorker().getException() != null && newState == State.FAILED) {
    exceptionMessage = ", " + webEngine.getLoadWorker().getException().toString();
}

но это не помогло.

(Наша ошибка была вызвана отсутствием CookieStore, кажется, вы не получаете его бесплатно, и вам нужно установить хранилище по умолчанию: http://docs.oracle.com/javase/7/docs/api/java/net/CookieHandler.html)

person Tony Eastwood    schedule 11.10.2013
comment
Куда вы положили этот код? В веб-движке загружается прослушиватель изменения состояния рабочего состояния? - person jewelsea; 11.10.2013
comment
Да в ChangeListener как в ' webEngine.getLoadWorker().stateProperty().addListener( new ChangeListener‹State›()..... - person Tony Eastwood; 11.10.2013