2016-09-04 1 views
1

Я пытаюсь реализовать многопоточность в стороне клиента с помощью VKthread с GWT,это можно передать ссылку на метод Java в JavaScript в GWT

моя проблема, что мне нужно передать ссылку на метод Java пронизывать Invoker в Java Script, так что, когда поток выполняется, то вызывается метод 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); 
        }); 

}-*/; 

Если я прошел яваскрипт метода $ wnd.vkthread это работает ну, но wh en пытается передать 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, что удобно, если вы собираетесь назвать его в более чем одном месте.

Если вы используете его только один раз, вы можете просто перенести его в $ entry() прямо в свой метод JSNI.

документация объясняет: 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); 
       });