2

所以,我有一个 webview 并且想要一个接一个地加载 2 个(或任何数字> 1)页面。但是页面更改不是在前一页面加载后立即发生,而是在一定时间后发生。例如:

public void load() 
{
    engine.load("link1");
    //need to wait some time here
    engine.load("link2");
    //need to wait some time here
    engine.load("link3");
}

当页面完成加载时,我试图让线程休眠:

engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
        @Override
        public void changed(ObservableValue observableValue, Worker.State o, Worker.State o2) {
            if (o2.equals(Worker.State.SUCCEEDED)) {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    });

但它不起作用,因为 engine.load() 不会等到页面加载(因为我们有事件监听器)。另一个缺点是 Thread.sleep() 会阻塞 GUI 和整个线程,因此我不能将它放在加载链接之间。

有什么解决办法吗?在页面加载之后和开始加载下一页之前放置延迟。

问候,

伊万

4

2 回答 2

2
Thread.sleep(n);

它是绘制窗口的线程,这就是它会阻塞 GUI 的原因。

您的问题的解决方案是将所有页面加载到一个单独的线程中。但是,如果您不在 javaFX 线程中,则无法加载页面...解决方案是使用 Platform.runLater() 函数加载此页面。

因此,您必须将以下代码实现到一个单独的线程中,该线程可以在不阻塞 GUI 的情况下休眠。

Platform.runLater(new Runnable() {

    @Override
    public void run() {
        webView.getEngine().load("http://www.my.url/");
    }
});
于 2013-07-17T15:44:33.550 回答
1
于 2013-07-17T19:55:41.467 回答