如何让JavaFx WebEngine详细报告错误?

Ton*_*ood 11 https javafx rtc http-headers

在JavaFx中,我可以将一个监听器附加到webEngine的加载工作者,如下所示:

 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());
      }
  });
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在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
Run Code Online (Sandbox Code Playgroud)

(Firefox或Chrome中的相同https地址会为我提供登录页面)

有谁知道如何从JavaFx WebEngine中获取更详细的报告.我不想只知道它失败了 - 我需要知道原因.我可以猜测我的错误是SSL /证书/ HTTPS相关,但目前我还在黑暗中,SSL的哪一部分导致它'失败'

小智 18

你可以用com.sun.javafx.webkit.WebConsoleListener.缺点是它是JRE内部API.

WebConsoleListener.setDefaultListener(new WebConsoleListener(){
    @Override
    public void messageAdded(WebView webView, String message, int lineNumber, String sourceId) {
        System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 该方法不存在 &gt;= Java 11 (3认同)

War*_*kst 7

您是否尝试过以下方法:

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());
    }
});
Run Code Online (Sandbox Code Playgroud)


Ton*_*ood 7

我们得到的最好的是:

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

但这没有帮助.

(我们的错误是由于缺少CookieStore引起的,似乎你没有免费获得一个 - 并且必须设置一个默认的:http: //docs.oracle.com/javase/7/docs/api/java/net /CookieHandler.html)