gpt4 book ai didi

java - 在 WebView 完全加载后执行任务

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:25 25 4
gpt4 key购买 nike

WebEngine 完成加载后是否可以自动运行任务?我知道我可以从 WebEngine 得到一个 Worker 来指示加载进度,但似乎反复轮询 Worker 不是一个优雅的解决方案(即锁定程序直到页面加载)。我知道我可以用 Task 来做到这一点,所以我能以某种方式为 WebEngine 获取 Task,并添加一个在完成时执行的命令吗?

最佳答案

样本基于 WebView documentation :

webView.getEngine().getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
@Override
public void changed(
ObservableValue<? extends Worker.State> observable,
Worker.State oldValue, Worker.State newValue ) {

if( newValue != Worker.State.SUCCEEDED ) {
return;
}

// Your logic here
}
} );

作为 lambda 表达式:

webView.getEngine().getLoadWorker().stateProperty().addListener(
(ObservableValue<? extends Worker.State> observable,
Worker.State oldValue,
Worker.State newValue) -> {
if( newValue != Worker.State.SUCCEEDED ) {
return;
}

// Your logic here
} );

如果您只想监听下一个页面加载而不是每个后续页面加载,则在页面加载后停止监听。

为此,您可以在监听器开始执行后删除监听器(在监听器代码中):

webview.getEngine().getLoadWorker().stateProperty().addListener(
new ChangeListener<Worker.State>() {
@Override
public void changed(
ObservableValue<? extends Worker.State> observable,
Worker.State oldValue, Worker.State newValue) {
switch (newValue) {
case SUCCEEDED:
case FAILED:
case CANCELLED:
webview
.getEngine()
.getLoadWorker()
.stateProperty()
.removeListener(this);
}


if (newValue != Worker.State.SUCCEEDED) {
return;
}

// Your logic here
System.out.println("page loaded");
}
} );

关于java - 在 WebView 完全加载后执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12540044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com