5

我正在研究 JavaFX 2.2,我正在使用 webview 将 html 代码集成到 JavaFX 场景中,并且能够正确加载 html。我正在关注这个链接,并试图将一些对象从 javascript 传递到 webview/controller,但我在 java 端得到空值。

我在 JSObject 中保存了一个接口对象,如下所示

webEngine.getLoadWorker().stateProperty().addListener(
        new ChangeListener<State>() {
            @Override
            public void changed(ObservableValue<? extends State> ov,
                State oldState, State newState) {
                if (newState == State.SUCCEEDED) {
                        JSObject win = (JSObject) webEngine.executeScript("window");
                        win.setMember("app", new JavaApp());
                    }
                }
            }
    );

我创建了一个类

public class JavaApp {

        public void exit() {
           Platform.exit();
        }
        public void print(Date date) {
            System.out.println("Parm:"+date);
         }
        public Date getValue() {
            return new Date();
         }
    }

我的html是

<html lang="en">
<head>
    <script type="text/javascript">
        function callJava(){
            app.print(new Date());
            var val = app.getValue();
            app.print(val);
        }
    </script>
</head>
<body>
<p>Help</p>    
<p><a href="about:blank" onclick="callJava();">Exit the Application</a></p>    
</body>
</html>

在上面的代码中,我总是在 JavaApp.print() 方法中打印空值。有趣的一点是,当我在 print 方法中将参数从 Date 更改为 String 并从 javascript 传递字符串时,我得到了正确的值。

在这种情况下我如何传输对象,尤其是 Date 对象。任何帮助都非常感谢

4

1 回答 1

5

Java不知道javascriptDate的类。

2.3 数据类型转换

您可以将javascript对象传递给Java,(您必须将其包装在 a 中JSObject)但您只能直接获取以下参数:

  • 数字
  • 布尔值
  • 字符串,
  • 数组
  • 您之前放入javascript的同一对象。

我给你的解决方案:

public class JavaApp {

    public void exit() {
       Platform.exit();
    }
    //public void print(Date date) {
    //    System.out.println("Parm:"+date);
    // }
    public void print(long date) {
        System.out.println("Parm:"+new Date(date));
     }
    public Date getValue() {
        return new Date();
     }
}

<html lang="en">
<head>
    <script type="text/javascript">
        function callJava(){
            // app.print(new Date());
            app.print(new Date().getTime());
            var val = app.getValue();
            app.print(val);
        }
    </script>
</head>
<body>
<p>Help</p>    
<p><a href="about:blank" onclick="callJava();">Exit the Application</a></p>    
</body>
</html>
于 2013-02-11T02:21:51.170 回答