GWT:“我的朋友们;无法识别的调用格式";:这是什么意思?
我得到这个错误:GWT:“我的朋友们;无法识别的调用格式";:这是什么意思?,gwt,interop,Gwt,Interop,我得到这个错误: public void query(String sql, QueryResult queryResult) { q = queryResult; realQuery(sql, conString); } public static native void realQuery(String sql, String conString) /*-{ $wnd.pg.connect(conString, function(err, client) {
public void query(String sql, QueryResult queryResult) {
q = queryResult;
realQuery(sql, conString);
}
public static native void realQuery(String sql, String conString) /*-{
$wnd.pg.connect(conString, function(err, client) {
client.query(sql, function(err, result) {
console.log(result.rows);
var code = "@db.tud.bp.werkstatt.client.PgClient::result(Ljava/lang/String;)(" + '"' + JSON.stringify(result.rows).replace('"','\\"') + '"' + ");";
console.log(code);
eval(code);
});
});
}-*/;
“无法识别的呼叫格式”是什么意思?为什么我在搜索时没有得到任何谷歌结果
我怀疑我在第3行以错误的方式调用JSNI函数。但我可以遵守文件中规定的所有规则
编辑:
这项工作:
com.google.gwt.event.shared.UmbrellaException: Exception caught: (Error)
@de.tud.bp.werkstatt.client.PgClient::realQuery(Ljava/lang/String;Ljava/lang/String;)
([string: 'SELECT age FROM person WHERE name='Ayeb'', string: '/rest/query']):
unrecognized calling format
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129)
这并不是:
public static native void realQuery(JavaScriptObject parsed) /*-{
var sql = parsed[0];
var conString = parsed[1];
$wnd.pg.connect(conString, function(err, client) {
});
}-*/;
您不能
eval
JSNI调用到Java中——这些代码不是真正的JavaScript,而是JS和Java在GWT中交互的一部分。最终的工作方式是重写这些调用,以便它们调用真正的JavaScript函数。您的结果
方法是静态方法吗?它是否只接收一个字符串作为参数?如果是这样,您的“+”+JSON.stringify(result.rows).replace(“”、“\\”)+“+”
可能就是问题所在。@GilbertoTorrezan:据我所知,错误是在函数调用之前抛出的。result是这样声明的:staticvoidresult(stringjson)
没有eval你有什么?只是日志声明?包裹(即伞内例外)错误是什么?您显然也在调用query
方法,就好像它是静态的一样(前面没有实例
),但它不是静态的。这和评估都没有真正意义,应该在问题中澄清。还有一点,在我添加注释之前-您只列出JSNI中query
method sig中的两个参数中的一个-QueryResult在哪里?通过“without the eval”,我的意思是我用一个正常的JSNI函数调用替换了它。此处的完整堆栈跟踪:。eval来自一个早期的迭代,我想让它更具动态性,但现在没关系,我只需要让调用首先工作。PgClient.java:Pg.java(QueryResult在这里):(在发布的源代码中,我尝试传递一个JavaScriptObject,但它似乎对我传递的内容没有多大影响。)“查询”在JS代码中,不是来自Java代码的“查询”。
public static native void realQuery(JavaScriptObject parsed) /*-{
var sql = parsed[0];
var conString = parsed[1];
$wnd.pg.connect(conString, function(err, client) {
client.query(sql, function(err, result) {
console.log(result.rows);
});
});
}-*/;