如何从GWT中的JSNI方法调用JSNI方法

时间:2014-10-09 11:18:06

标签: java javascript gwt jsni

是否可以通过这种方式从同一个类中的另一个本机方法调用本机方法?

public native JavaScriptObject mySECONDJsniMethod(String name) /*-{
        //..
        return secondVar;
}-*/;

public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{
        var secondVar = mySECONDJsniMethod(name);
        //..
        return firstVar;
}-*/;

在我的Chrome控制台中,它会返回:Uncaught TypeError: mySECONDJsniMethod is not a function。 有任何想法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

是。在JSNI for myFIRSTJsniMethod()中,使用普通的JSNI语法来调用Java方法。

例如,如果这两个方法都在类com.mycompany.Test中,您可以像这样调用mySECONDJsniMethod():

public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{
    var secondVar = this.@com.mycompany.Test::mySECONDJsniMethod(Ljava/lang/String;)(name);
    //..
    return firstVar;
}-*/;

有关详细信息,请参阅Accessing Java Methods and Fields from JavaScript上的GWT文档。

编辑:以下是一个完整的可编辑示例:

package com.mycompany.client;

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

public class SO26277049 implements EntryPoint {

    @Override
    public void onModuleLoad() {
        final JavaScriptObject firstVar = myFIRSTJsniMethod("hello world!");
    }

    public native JavaScriptObject mySECONDJsniMethod(String name) /*-{
        var secondVar = {
            name: name
        };
        return secondVar;
    }-*/;

    public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{
        var secondVar = this.@com.mycompany.client.SO26277049::mySECONDJsniMethod(Ljava/lang/String;)(name);
        $wnd.alert(secondVar.name);
        var firstVar = secondVar;
        return firstVar;
    }-*/;
}