0
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);
        });
    });
}-*/;

我收到此错误:

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)

“无法识别的呼叫格式”是什么意思,为什么我在搜索时没有得到任何谷歌结果?

我怀疑我在第 3 行中以错误的方式调用了 JSNI 函数。但我是 AFAIK 遵循此处文档中指定的所有规则。

编辑

这有效:

public static native void realQuery(JavaScriptObject parsed) /*-{
    var sql = parsed[0];
    var conString = parsed[1];
    $wnd.pg.connect(conString, function(err, client) {
    });
}-*/;

这不会:

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);
        });
    });
}-*/;
4

1 回答 1

1

您不能将evalJSNI 调用调用到 Java 中——该代码不是真正的 JavaScript,而是 JS 和 Java 在 GWT 中交互方式的一部分。最终的工作方式是重写这些调用,以便它们调用真正的 JavaScript 函数。

于 2012-11-05T23:58:15.313 回答