JavaFX Webview:加载成功但渲染失败

Kwo*_*oin 6 java webview java-8 javafx-8

我有一个Webview(JavaFX 8)加载来自维基百科的文章.

我放了一个刷新按钮以允许刷新,基本上,它使用相同的URL再次调用WebView的webEngine的load方法.但大约有50%的时间从未呈现过该文章.在这种情况下,我可以右键单击Web视图以手动刷新,然后它将成功呈现.

我试着看看LoadWorker状态,它总是说"成功"......

下面是一个简短的可运行的测试类,它证明了我的观点.

public class Test1 extends Application {

  @Override
  public void start(Stage primaryStage) throws Exception {

    final WebView webView = new WebView();
    webView.getEngine()
        .load("http://fr.wikipedia.org/wiki/Sp%C3%A9cial:Page_au_hasard");
    Tab tab = new Tab("webView", webView);
    TabPane tabPane = new TabPane(tab);
    BorderPane borderPane = new BorderPane(tabPane);
    Button buttonRefresh = new Button("Refresh");
    buttonRefresh.setOnAction(new EventHandler<ActionEvent>() {

      public void handle(ActionEvent event) {
        webView.getEngine()
            .load("http://fr.wikipedia.org/wiki/Sp%C3%A9cial:Page_au_hasard");
      }
    });
    borderPane.setBottom(buttonRefresh);
    Scene scene = new Scene(borderPane);
    primaryStage.setScene(scene);
    primaryStage.show();
  }

  public static void main (String[] args) {
    launch(args);
 } 
Run Code Online (Sandbox Code Playgroud)

}

难道我做错了什么?有谁知道这个问题可能来自哪里?

编辑

我添加了几行来绕过这个问题,当loadWorker的状态变为SUCCESS时,我检查DOM中的头.如果它是空的,我会重新加载.现在它(看起来)100%好,但我仍然很好奇为什么它不是一直只是一直工作.

一些可能有用的想法

  • 链接http://fr.wikipedia.org/wiki/Sp%C3%A9cial:Page_au_hasard重定向到随机文章(这就是我的刷新按钮无法使用的原因webView.getEngine.reload()).
  • 将ChangeListener放在workLoader的stateProperty上以调用webEngine的reload方法实际上是有效的.每个页面都成功渲染,但已渲染的页面也将被重新渲染,这很糟糕.