11

在 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());
      }
  });

但是,如果我尝试在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

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

有谁知道我如何从 JavaFx WebEngine 获得更详细的报告。我不想只知道它失败了——我需要知道为什么。我我的错误与 SSL/证书/HTTPS 相关,但目前我对 SSL 的哪一部分导致它“失败”一无所知

4

3 回答 3

19

您可以使用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);
    }
});
于 2016-06-10T17:01:03.483 回答
8

我们得到的最好的是:

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 )

于 2013-10-11T08:15:51.970 回答
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());
    }
});
于 2013-10-10T14:04:27.467 回答