Из документации WebEngine
:
Загрузка всегда происходит в фоновом потоке.Методы, инициирующие загрузку, возвращаются сразу после планирования фонового задания.Для отслеживания хода выполнения и / или отмены задания используйте экземпляр Worker
, доступный из метода getLoadWorker()
.
Все, что вам нужно сделатьСоблюдайте progress
свойство Worker
.Вот небольшой пример:
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.Separator;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
WebView view = new WebView();
BorderPane root = new BorderPane(view, createTop(view), null, null, null);
primaryStage.setScene(new Scene(root, 1000, 600));
primaryStage.setTitle("WebView Example");
primaryStage.show();
}
private VBox createTop(WebView view) {
ProgressBar progBar = new ProgressBar();
progBar.progressProperty().bind(view.getEngine().getLoadWorker().progressProperty());
progBar.visibleProperty().bind(
Bindings.when(progBar.progressProperty().lessThan(0).or(progBar.progressProperty().isEqualTo(1)))
.then(false)
.otherwise(true)
);
progBar.managedProperty().bind(progBar.visibleProperty());
progBar.setMaxWidth(Double.MAX_VALUE);
VBox top = new VBox(5, createSearchBar(view), progBar, new Separator());
top.setAlignment(Pos.CENTER);
return top;
}
private HBox createSearchBar(WebView view) {
TextField urlField = new TextField("https://stackoverflow.com/");
view.getEngine().locationProperty().addListener(obs -> urlField.setText(view.getEngine().getLocation()));
Button loadBtn = new Button("Load");
loadBtn.setOnAction(event -> {
event.consume();
view.getEngine().load(urlField.getText());
});
loadBtn.disableProperty().bind(view.getEngine().getLoadWorker().runningProperty());
HBox searchBar = new HBox(5, urlField, new Separator(Orientation.VERTICAL), loadBtn);
searchBar.setPadding(new Insets(10, 10, 3, 10));
searchBar.setAlignment(Pos.CENTER);
HBox.setHgrow(urlField, Priority.ALWAYS);
return searchBar;
}
}