簡體   English   中英

JSNI - 從 JS function 調用 Java 方法

[英]JSNI - invoke Java method from JS function

我正在嘗試直接從我的 JSNI function 調用 java 方法,但由於某種原因它永遠無法正常工作。 我在這里做錯了什么? :(

這是我的代碼

/**
   For UI button click method...
*/
private native void test(String param)
/*-{

var a=(function b(p)
{
 this.@com.(...).TestClass::setTest(Ljava/lang/String;)(p);

})(param);

}-*/

private void setTest(String param){Window.alert(param);}

感謝所有有用的評論

您需要在function塊之外this進行引用:

/**
 * For UI button click method...
 */
private native void test(String param) /*-{
    var theInstance = this;
    var a = ( function b(p) {
        theInstance.@com.(...).TestClass::setTest(Ljava/lang/String;)(p);
    })(param);
}-*/;

private void setTest(String param){
    Window.alert(param);
}

您對 this 關鍵字的使用可能會導致問題。 在您的上下文中, this關鍵字指向閉包

(function b(p)
{
 this.@com.(...).TestClass::setTest(Ljava/lang/String;)(p);

})(param);

理想情況下,它應該指向 GWT 編譯的 function

private native void test(String param)

這個說法。

嘗試使用此代碼段(我不確定我的語法是否正確,請使用 GWT JSNI wiki 進行驗證):

private native void test(String param)
/*-{    
var a = this.@com.(...).TestClass::setTest(Ljava/lang/String;)(param);    
}-*/

順便說一句,擁有一個 function 其唯一目的是調用另一個 function 是代碼異味。

是的,正如 Zasz 指出的那樣,您的代碼過於復雜(如果您真的想提供 JavaScript 方法,但在這種情況下,您必須以完全不同的方式進行操作......)

所以我測試了代碼,這有效:

/*    JNI Example method... */
private native void test(String param) /*-{  
    this.@com.stefank.client._53_JavaScriptOverlayTypes::setTest(Ljava/lang/String;)(param); 
}-*/;

private void setTest(String param){
    Window.alert(param);
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM