通过WebEngine发出的JavaFX8 JavaScript回调

通过WebEngine发出的JavaFX8 JavaScript回调,javascript,javafx,callback,webengine,Javascript,Javafx,Callback,Webengine,我对JavaFX中的WebEngine类有一个问题,其中JavaScript回调似乎停止了工作 webEngine = webView.getEngine(); webEngine.load(getClass().getResource("source.html").toString()); webEngine.setUserStyleSheetLocation(getClass().getResource("style.css").toString()); JSObject js = (JS

我对JavaFX中的WebEngine类有一个问题,其中JavaScript回调似乎停止了工作

webEngine = webView.getEngine();
webEngine.load(getClass().getResource("source.html").toString());
webEngine.setUserStyleSheetLocation(getClass().getResource("style.css").toString());

JSObject js = (JSObject) webEngine.executeScript("window");
js.setMember("app", new JavaLink());

public class JavaLink{
        public void setDrag(boolean drag) {
            System.out.println(drag);
        }
    }
我使用下面的部分设置了基本代码,并创建了一个html文件:

<body>
    <div id = "block">Text</div>

    <script>
        document.getElementById("block").onmouseover = function() {notifyPos()};
        document.getElementById("block").onmouseout = function() {notifyNeg()};

        function notifyPos() {
            app.setDrag(true);
        }

        function notifyNeg() {
            app.setDrag(false);
        }
    </script>
</body>
新增代码:

webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {    @Override
                public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State t1) {
                    if (t1 == Worker.State.SUCCEEDED) {
                        // this will be run as soon as WebView is initialized.
                        JSObject js = (JSObject) webEngine.executeScript("window");
                        js.setMember("app", new JavaLink());

                    }
                }
            });
webEngine.getLoadWorker().stateProperty().addListener(新的ChangeListener(){@Override

public void changed(ObservalEvalue修复了我的电脑,因为这显然不起作用,或者如果有人想澄清发生了什么,垃圾收集会删除链接

js.setMember("app", new JavaLink());
我添加到修复程序中的代码是预先分配链接

JavaLink link = new JavaLink();
js.setMember("app", link);

修复了我的电脑,因为这显然不起作用,或者如果有人想澄清发生了什么,垃圾收集会删除链接

js.setMember("app", new JavaLink());
我添加到修复程序中的代码是预先分配链接

JavaLink link = new JavaLink();
js.setMember("app", link);