JavaFx无法执行javascript函数

JavaFx无法执行javascript函数,javafx,Javafx,我正在使用JavaFX嵌入浏览器。我正试图从java类WebScale运行javascript函数addnum(),但出现错误。如果我从webengine.executeScript()执行document.write(),这是可能的。但是我不能调用我的函数。 我的代码如下: public class WebScale extends JApplet { static ZoomingPane zoomingPane; private static JFXPanel fxContainer; /

我正在使用JavaFX嵌入浏览器。我正试图从java类WebScale运行javascript函数addnum(),但出现错误。如果我从webengine.executeScript()执行document.write(),这是可能的。但是我不能调用我的函数。 我的代码如下:

public class WebScale extends JApplet {
static ZoomingPane zoomingPane;
private static JFXPanel fxContainer;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            final JFrame frame = new JFrame("Area Configurator");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JApplet applet = new WebScale();
            applet.init();

            frame.setContentPane(applet.getContentPane());

            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

            applet.start();

            frame.addComponentListener(new java.awt.event.ComponentAdapter() {
                @Override
                public void componentResized(java.awt.event.ComponentEvent evt) {
                    if (zoomingPane != null) {
                        zoomingPane.setZoomFactors((double)(frame.getWidth()/ 1280.0), (double)(frame.getHeight() / 800.0));
                    }
                }
            });
        }
    });
}

@Override
public void init() {
    fxContainer = new JFXPanel();
    fxContainer.setPreferredSize(new Dimension(800, 700));
    add(fxContainer, BorderLayout.CENTER);
    // create JavaFX scene
    Platform.runLater(new Runnable() {

        @Override
        public void run() {
            createScene();
        }
    });
}

private void createScene() {
    WebView webView = new WebView();
    zoomingPane = new ZoomingPane(webView);
    BorderPane bp = new BorderPane();
    bp.setCenter(zoomingPane);
    fxContainer.setScene(new Scene(bp));
    String strpath ;
    strpath="file:///C:/Users/Priyanka/Desktop/FDASH/StationV3/Main.html";


  final WebEngine engine = webView.getEngine();

   engine.load(strpath);

   engine.executeScript("addNum()");



}

private class ZoomingPane extends Pane {
    Node content;
    private final DoubleProperty zoomFactor = new SimpleDoubleProperty(1);
    private double zoomFactory = 1.0;

    private ZoomingPane(Node content) {
        this.content = content;
        getChildren().add(content);
        final Scale scale = new Scale(1, 1);
        content.getTransforms().add(scale);

        zoomFactor.addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                scale.setX(newValue.doubleValue());
                scale.setY(zoomFactory);
                requestLayout();
            }
        });
    }

    @Override
    protected void layoutChildren() {
        Pos pos = Pos.TOP_LEFT;
        double width = getWidth();
        double height = getHeight();
        double top = getInsets().getTop();
        double right = getInsets().getRight();
        double left = getInsets().getLeft();
        double bottom = getInsets().getBottom();
        double contentWidth = (width - left - right)/zoomFactor.get();
        double contentHeight = (height - top - bottom)/zoomFactory;
        layoutInArea(content, left, top,
                contentWidth, contentHeight,
                0, null,
                pos.getHpos(),
                pos.getVpos());
    }

    public final Double getZoomFactor() {
        return zoomFactor.get();
    }
    public final void setZoomFactor(Double zoomFactor) {
        this.zoomFactor.set(zoomFactor);
    }
    public final void setZoomFactors(Double zoomFactorx, Double Zoomfactory) {
        this.zoomFactory = Zoomfactory;
        this.zoomFactor.set(zoomFactorx);
    }

    public final DoubleProperty zoomFactorProperty() {
        return zoomFactor;
    }
}
假设addNum()是在Main.html中定义的,则在调用它时javascript尚未加载。您应该添加一个侦听器,以便在页面完全加载后调用javascript:

    final WebEngine engine = webView.getEngine();
    engine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<State>() {
                public void changed(ObservableValue ov, State oldState, State newState) {
                    if (newState == State.SUCCEEDED) {
                        engine.executeScript("addNum()");
                    }
                }
            });

    engine.load(strpath);
final-WebEngine=webView.getEngine();
engine.getLoadWorker().stateProperty().addListener(
新的ChangeListener(){
公共无效已更改(ObservalEvalue ov、State oldState、State newState){
if(newState==State.successed){
engine.executeScript(“addNum()”);
}
}
});
发动机负荷(strpath);
addNum()在哪里定义?你能分享它的代码吗?
    final WebEngine engine = webView.getEngine();
    engine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<State>() {
                public void changed(ObservableValue ov, State oldState, State newState) {
                    if (newState == State.SUCCEEDED) {
                        engine.executeScript("addNum()");
                    }
                }
            });

    engine.load(strpath);