Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
4 / 4 / 2
Регистрация: 13.04.2017
Сообщений: 282
1

ActionPerformed и WebView.getEngine().load();

14.06.2017, 15:18. Показов 1157. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добра, помогите возможно с самым тупым вопросом, я добавляю слушателя ActionListener к кнопке, в методе actionPerformed слушателя я использую
Java
1
2
3
4
5
6
Platform.runLater(new Runnable() {
            @Override
            public void run() {
                webView.getEngine().load(url);
            }
});
Дальше идёт код который должен работать со страницей, которая уже должна быть загружена кодом выше, в смысле должна уже отображаться на экране монитора. Но почему-то страница начинает отображаться лишь тогда, когда абсолютно весь код метода actionPerformed выполнился. И тут вопрос, как сделать так, чтобы в actionPerformed страница отобразилась сразу после того как я написал код выше и не ждала пока выполнится весь код метода слушателя, буду очень благодарен за ответ!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2017, 15:18
Ответы с готовыми решениями:

Про actionPerformed
Здравствуйте и так к делу мне нужно чтобы в JTextField text = new JTextField(); выходило вот...

энное количество JLabel() + actionPerformed
Создаю программу и зашел в тупик. Я достаю из БД энное количество фамилий студентов и мне...

Qt creator. Есть файл aboutDialog.cpp/h с webview, как получить доступ к webview из mainWindow ?
aboutDialog.h #ifndef ABOUTDIALOG_H_ #define ABOUTDIALOG_H_ #include <QtGui/QDialog>...

Failed to load resource 403 (Forbidden), Ошибка при загрузке $('.').load(.)
При выполнении скрипта JQuery $('#rezult').load('page.php') у всех пользователей загрузка...

10
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
14.06.2017, 22:34 2
Java
1
2
3
4
5
6
7
8
        button.setOnAction(event -> {
            Platform.runLater(() -> webView.getEngine().load("http://yandex.ru"));
            new Thread(() -> {
                for (int i = 0; i < 10000000; i++) {
                    System.out.println("after as write this " + i);
                }
            }).start();
        });
но наоборот почему-то не работает, если обернуть в thread webView.getEngine().load();
0
4 / 4 / 2
Регистрация: 13.04.2017
Сообщений: 282
15.06.2017, 01:35  [ТС] 3
Kadota, возможно мне бы помогло бы это, но стоило написать, что я использую кнопку из пакета swing, а там такого метода нет, я про setOnAction)
0
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
15.06.2017, 01:41 4
так вроде без разницы
Java
1
2
3
        button.addActionListener(event -> {
     //...
        }
0
4 / 4 / 2
Регистрация: 13.04.2017
Сообщений: 282
15.06.2017, 02:24  [ТС] 5
Kadota, я так и делал, но буквально минуты четыре назад понял, что проблема не в том о чём я подумал. Короче, я в приложении я нажимаю на кнопочку, начинает подгружаться страница, точнее facebook, на этой странице я использую робота для автоматизации ввода логина и пароля, но, даже когда страница уже подгрузилась, она остаётся неактивным на щелчки мыши, пока не отработают все команды во всех слушателях. Приложение вообще как бы зависает, я ничего не могу в нём сделать, пока в нём работают эти СЛУШАТЕЛИ. Это ужасно, уже 2-ой день сижу над этой проблемой. Чёрти что! И в инете ничего такого найти не могу! HELP!
0
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
15.06.2017, 02:43 6
у меня ничего не зависает. Можешь весь код скинуть?
0
4 / 4 / 2
Регистрация: 13.04.2017
Сообщений: 282
15.06.2017, 03:03  [ТС] 7
Ещё кое-что. Создал отдельную кнопку с отдельным слушателем. Этот слушатель через робота заполняет поля логина и пароля. Так вот, проводя "исследование" кое-что заметил. Абсолютно непонятно почему, но! клики срабатываю рандомно!!!!!
Бывали случаи когда вводился логин и пароль с первого раза, бывали когда с 3-его и 2-ого. Что за бред, это аномалии swing'a?

Добавлено через 10 минут
Сори, но весь код уж точно я всунуть не смогу т.к. куча классов..., но могу всунуть код слушателя.
Java
1
2
3
4
5
6
7
8
9
10
11
public class ListenerForOpenMyPageFacebookButton implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                webView.getEngine().load("https://www.facebook.com");
            }
        });
        Здесь вводится пароль и логин объектом класса robot
    }
}
0
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
15.06.2017, 09:51 8
Лучший ответ Сообщение было отмечено User255 как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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();
    }
}
попробуй так
1
4 / 4 / 2
Регистрация: 13.04.2017
Сообщений: 282
15.06.2017, 12:04  [ТС] 9
Kadota, Спасибо!!!!!! Это пожалуй лучший вариант, но всё же иногда просто не вводятся логин и пароль, происходит то о чём я писал выше, короче какой-то рандом по активности окна...

Добавлено через 39 минут
Всё поправил с неактивность, не работало окно т.к. робот не может мгновенно передвинуть мышку и нажать, поэтому я установил Thread.sleep(200) чтобы дать роботу передвинуть мышку, а потом только нажать. В общем БОЛЬШОЕ ВАМ СПАСИБО!
0
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
15.06.2017, 17:52 10
Цитата Сообщение от User255 Посмотреть сообщение
не работало окно т.к. робот не может мгновенно передвинуть мышку и нажать
не совсем, это из-за моего кривого кода. Там иногда notify выполняется до того как вызовется wait, другого notify нет и робот просто ждет. Но sleep должен помочь, хотя это и не правильно как-то.
0
4 / 4 / 2
Регистрация: 13.04.2017
Сообщений: 282
15.06.2017, 18:51  [ТС] 11
Kadota, в любом случае наконец-то всё работает как должно!
0
15.06.2017, 18:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2017, 18:51
Помогаю со студенческими работами здесь

Создание actionPerformed при наследовании JButton
Доброе время суток! Кратко о проблеме: Есть панель на которою будут добавлятся...

Не срабатывает метод actionPerformed по таймеру из inner класса, пример из Хортсмана
опять таки пример из книги, всё компилируется но метод actionPerformed не выполняется, разница в...

Не работает: Button.addActionListener(new ActionListener() { public void actionPerformed(actionEvent evt) { } });
Button.addActionListener(new ActionListener() { public void...

Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку
Подскажите, как должен выглядеть код простейшей программы на C# (Loader.exe), которая бы загружала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru