1

javaメソッドから戻り値を取得しようとしていますが、非常に奇妙なものが返されます。それは、javascriptで記述されたメソッド自体を返すと思います。

ここにjavaメソッドのコードがあります:

public String getNameToShow() {
        return "Chart number 1";
    }

およびjavascriptメソッド:

 public native void drawJSChart(String divId, int a, String jsData) /*-{
            try {
                //First create a script where to paste the jsData
                var scriptID = this.@myPackage.MyClass::getNameToShow();
                console.log(scriptID);
                //Some code
            } catch (e) {
                console.error(e.message);
            }
        }-*/;

ありがとうございました。

4

2 に答える 2

5

jsメソッドを要求したため、jsメソッドを返します。

JSNIコードからのJavaメソッドの呼び出しは、次のようになります。

var scriptID = this.@myPackage.MyClass::getNameToShow(*)(); //notice second pair of braces

基本的に、JSNIからjavaメソッドを呼び出すには、2組の中括弧を配置する必要があります。最初にメソッドのパラメータータイプを定義し(私の例では、*どのパラメータータイプにも一致するように使用しました)、2番目にパラメーターをメソッドに渡すために使用されます。

于 2012-04-06T08:44:39.313 に答える
1

Java関数のタイプも渡す必要があります。このように書くとうまくいきます:

package XXXXX.client;

import com.google.gwt.core.client.EntryPoint;

class _24_TestJSNIMethodCallback implements EntryPoint {
    public void onModuleLoad() {
        drawJSChart();
    }

    public String getNameToShow() {
        return "Chart number 1";
    }

    public native void drawJSChart() /*-{
        try {
            //First create a script where to paste the jsData 
            var scriptID = this
                    .@XXXXX.client._24_TestJSNIMethodCallback::getNameToShow()();
            $wnd.alert(scriptID);
            //Some code 
        } catch (e) {
            console.error(e.message);
        }
    }-*/;

}
于 2012-04-06T08:48:42.943 に答える