ActionPerformed и WebView.getEngine().load(); - Java
Формулировка задачи:
Всем добра, помогите возможно с самым тупым вопросом, я добавляю слушателя ActionListener к кнопке, в методе actionPerformed слушателя я использую
Дальше идёт код который должен работать со страницей, которая уже должна быть загружена кодом выше, в смысле должна уже отображаться на экране монитора. Но почему-то страница начинает отображаться лишь тогда, когда абсолютно весь код метода actionPerformed выполнился. И тут вопрос, как сделать так, чтобы в actionPerformed страница отобразилась сразу после того как я написал код выше и не ждала пока выполнится весь код метода слушателя, буду очень благодарен за ответ!!!
Platform.runLater(new Runnable() {
@Override
public void run() {
webView.getEngine().load(url);
}
});Решение задачи: «ActionPerformed и WebView.getEngine().load();»
textual
Листинг программы
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javax.swing.*;
import java.awt.*;
public class WebExp extends JFrame {
WebView webView;
Robot robot;
WebExp() throws AWTException {
super();
JFXPanel panel = new JFXPanel();
Platform.runLater(() -> webView = new WebView());
JButton button = new JButton("OK");
robot = new Robot();
button.addActionListener(event -> {
Thread robotThread = new Thread(() -> {
synchronized (robot) {
try {
robot.wait();
robotWork(); // начинает исполнение после того как robot освободится
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
robotThread.start();
Platform.runLater(() -> {
webView.getEngine().load("http://facebook.com");
webView.getEngine().getLoadWorker().runningProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue) {
synchronized (robot) {
robot.notify(); // ждет пока загрузится страница, чтобы освободить robot'a
}
}
});
});
});
Platform.runLater(() -> panel.setScene(new Scene(webView)));
setLayout(new BorderLayout());
add(panel, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
setSize(1100, 600);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
private void robotWork() {
// что делает робот
}
public static void main(String[] args) throws Exception {
new WebExp();
}
}