2014-10-09 51 views
1

以這種方式可以從同一類中的另一個本地方法調用本地方法嗎?如何從GWSN中的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

是的。在myFIRSTJsniMethod()的JSNI中,使用正常的JSNI語法來調用Java方法。

例如,如果這兩種方法都在類com.mycompany.Test,你可以調用mySECONDJsniMethod()像這樣:

public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{ 
    var secondVar = [email protected]::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 = [email protected]::mySECONDJsniMethod(Ljava/lang/String;)(name); 
     $wnd.alert(secondVar.name); 
     var firstVar = secondVar; 
     return firstVar; 
    }-*/; 
} 
+0

現在它返回* mySECONDJsniMethod *未定義@Daniel Trebbien。 – django 2014-10-09 11:37:09

+0

@django:什麼是包含這兩種方法的完全限定類名?你需要使用它來代替'com.mycompany.Test'。我編輯了我的答案給出了一個完整的例子。 – 2014-10-09 11:46:22