5

私はJavaFX2.2に取り組んでおり、Webviewを使用してHTMLコードをJavaFXシーンに統合しており、HTMLを正しくロードできました。私はこのリンクをたどっていて、いくつかのオブジェクトをjavascriptからwebview / controllerに渡そうとしていましたが、java側でnull値を取得しています。

以下のようにインターフェースオブジェクトを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()メソッドで常にnull値が出力されます。興味深い点は、printメソッドでパラメーターをDateからStringに変更し、javascriptから文字列を渡すと、正しい値が得られることです。

この場合、オブジェクト、特にDateオブジェクトを転送する方法。どんな助けでも大いに感謝されます

4

1 に答える 1

5

JavaはjavascriptDateのクラスを知りません。

2.3データ型の変換

javascriptオブジェクトをJavaに渡すことができますが(ラップする必要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 に答える