是否可以将GW方法的引用传递给GWT中的javascript

时间:2016-09-04 07:26:06

标签: javascript java multithreading gwt

我正在尝试通过使用带有GWT的VKthread在客户端实现多线程,

我的问题是我需要将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方法时它不起作用!

2 个答案:

答案 0 :(得分: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);
                });

答案 1 :(得分: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