Is it possible to have a task automatically run after the WebEngine
finishes loading? I know I can get a Worker
from WebEngine
to indicate loading progress, but it seems like repeatedly polling the Worker
not an elegant solution (i.e. locking up program until page loads). I know I can do this with a Task
, so can I get the Task
for WebEngine
somehow, and add an execute on complete command?
質問する
9467 次
1 に答える
23
WebViewドキュメントに基づくサンプル:
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
}
} );
ラムダ式として:
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");
}
} );
于 2012-09-22T03:34:55.793 に答える