2016-09-04 56 views
1

我試圖用VKthread與GWT來實現客戶端多線程,是有可能的Java方法通過參考的JavaScript GWT

我的問題,我需要傳遞的Java方法的引用線程在Java腳本調用,使執行線程時,它調用Java方法

這裏是我的代碼:

static JavaScriptObject sum() { 

    return flipName(); 
} 

static native JavaScriptObject flipName() /*-{ 
    console.log("asd"); 
}-*/; 


native String Excec() /*-{ 

    $wnd.vkthread 
      .exec(
        @com.tradeos.b2b.industries.freight.data.freightTrade.marketplace.builders.client.MarketPlaceQuoteResultsPanel::sum()(), //function to execute in a threads 
        [], //arguments for the function 
        function(data) { // callback function; 
         var foo = data; 
         console.log(foo); 
        }); 

}-*/; 

如果我通過JavaScript來$ wnd.vkthread它的工作原理好吧,但是嘗試通過java方法它不起作用!

回答

0

您需要導出方法:

public static native void exportStaticMethod() /*-{ 
     $wnd.sum = 
      $entry(@com.tradeos.b2b.industries.freight.data.freightTrade.marketplace.builders.client.MarketPlaceQuoteResultsPanel::sum()); 
}-*/; 

現在你可以使用$ wnd.sum而不是你的Java方法,如果您打算將其稱之爲在一個以上的地方時會非常方便。

如果你只使用它一次,你可以直接在你的JSNI方法中將它包裝到$ entry()中。

文檔解釋了它: Calling a Java Method from Handwritten JavaScript

2

在你的代碼片段,你是調用你的方法(::sum()()),以獲得對方法的引用,刪除最後對括號。你也應該把它包裝成$entry

$wnd.vkthread 
     .exec(
       $entry(@com.tradeos.b2b.industries.freight.data.freightTrade.marketplace.builders.client.MarketPlaceQuoteResultsPanel::sum()), //function to execute in a threads 
       [], //arguments for the function 
       function(data) { // callback function; 
        var foo = data; 
        console.log(foo); 
       });