有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在GWT中从JSNI方法调用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) 个答案

  1. # 1 楼答案

    对。在myFIRSTJsniMethod()的JSNI中,使用正常的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;
        }-*/;
    }