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

时间:2015-06-14 22:08:05

标签: java webview java-8 javafx-8

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

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

我试着查看LoadWorker状态,它总是说" SUCCEED" ...

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

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

}

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

修改

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

一些可能有用的想法

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

0 个答案:

没有答案