2013-03-20 112 views
6

JavaFX中我可以附加一个监听器向负载工人像这样的webEngine:如何让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

我们曾经得到的最好的是:

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

+0

你把那段代码放在哪里?在Web引擎加载工作人员状态属性更改侦听器? – jewelsea 2013-10-11 08:37:29

+0

是在ChangeListener中,如'webEngine.getLoadWorker()。stateProperty()。addListener( new ChangeListener ()..... – 2013-10-11 12:51:37

4

你有没有试过如下:

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

您可以使用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); 
    } 
});