我正在尝试通过使用带有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方法时它不起作用!
答案 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()中。