2012-05-17 75 views
1

我需要從Javascript調用Java方法。所以我定義的方法:JSNI使用Long參數調用Java方法

private native void registerMethod() /*-{ 
    var self = this; 
    $wnd.test = function(longParam) { 
     [email protected]::test(Ljava/lang/Long;)(longParam); 
    }; 
}-*/; 

Java方法:

private void test(Long longParam) { 
    GWT.log("Call to test with longParam = " + longParam); 
} 

的JS調用:

public static native void paypalClose() /*-{ 
    $wnd.alert(top.test); 
    top.test(10); 
    top.dgFlow.closeFlow(); 
    top.close(); 
}-*/; 

警報顯示的JavaScript函數定義。如果我打電話top.test(),它工作,但沒有參數通過。但是,如果我撥打top.test(10),我會收到一個空警報窗口。

回答

4

你的方法除了java.lang.Long而不是long,所以你必須創建一個Long的實例。你可以使用@java.lang.Long::new@java.lang.Long::valueOf,除了你不能使用long小號無論是在JSNI:https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI#important

因爲JavaScript數字是完全等同於Java的double S,你應該使用doublejava.lang.Double作爲參數。一旦進入Java世界,如果你願意,你可以把double加到long中,但是不能從JSNI中加載。

+0

我改爲'double',它可以工作。 – Sydney