JavaFX webview 加载页面之间的延迟

标签 java webview javafx

所以,我有一个 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");
}

我尝试在页面加载完成时让线程 hibernate :

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 和整个线程,因此我无法将其放置在加载链接之间。

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

问候,

伊万

最佳答案

Thread.sleep(n);

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

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

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

Platform.runLater(new Runnable() {

    @Override
    public void run() {
        webView.getEngine().load("http://www.my.url/");
    }
});

关于JavaFX webview 加载页面之间的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16521878/

相关文章:

java - 在 onClick 事件之后启动 onTouchEvent

java - Java通讯录程序

android - 检查 WebView 何时完全加载,包括 url 重定向

javafx 实现并显示 ListView

JavaFx:组合框文本换行

javafx - javafx 2.1 中 FX.defer() 方法的等价物是什么

java - Nativescript + Angular - 无法实例化接收器....未找到类

java - 找出给定某些条件的 2D boolean 数组的所有可能组合(使用 Java)

android - 在 Android 的 webview 中使用后退按钮

android - 如何保存和恢复android WebView的WebBackForwardList?