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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д