Java - получить возвращаемое значение executeScript в потоке - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь выполнить javascript в WebView и получить вывод.Это работает, но я получаю сообщение об ошибке при попытке выполнить это в потоке:

@FXML
private void handleButtonAction(ActionEvent event) throws InterruptedException {

int x = this.test();
System.out.print(x);
}    



private int test()
{
    return (Integer) engine.executeScript("function x(){return 3}; x();");
}

Дает вывод '3' и не выдает исключение, но при выполнении:

public void exampleThread() {

    Thread one = new Thread() {
        public void run() {

            while (true) {
                try {
                    System.out.println("Does it work?");
                    Thread.sleep(1000);

                    int y = test();

                    System.out.println("Nope: "+y);
                } catch (InterruptedException v) {
                    System.out.println(v);
                }
            }
        }
    };

    one.start();
}

Выдает:

Исключение в потоке "Thread-12" java.lang.IllegalStateException: Нет в потоке приложения FX;currentThread = Thread-12 в com.sun.javafx.tk.Toolkit.checkFxUserThread (Toolkit.java:279) в com.sun.javafx.tk.quantum.web.WebEngine.checkThread (WebEngine.java:1243) в javafx.scene.web.WebEngine.executeScript (WebEngine.java:1003) в testApp.FXMLDocumentController.test (FXMLDocumentController.java:91) в testApp.FFXMLDocumentController.java:28) at testApp.FXMLDocumentController $ 1.run (FXMLDocumentController.java:76)

Кто-нибудь знает, что здесь происходит?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы используете WebEngine, который находится «внутри» JavaFX - и, похоже, он хочет работать в потоке приложения JavaFX, где вы находитесь при выполнении вашего обработчика событий в handleButtonAction() - но не при запуске собственного нить. Самое простое решение - просто запустить тестовый метод в потоке JavaFX (посмотрите Platform.invokeLater()?), Или вы можете просто передать скрипт в движок JavaScript в Java, а не в JavaFX (что избавит вас от необходимости работать в потоке приложений JavaFX ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...