GWT RPC AsynCcallback跳过onSuccess和onFailure方法

时间:2013-04-12 08:40:58

标签: java gwt asynchronous callback rpc

我尝试编写GWT应用程序代码,我需要使用RPC从服务器端获取结果。我遵循了GWT RPC教程并最终得到了一些商品。但是当我调试我的程序时,我看到我的程序跳过了onFailure和onSuccess方法,所以我得到了nullpointerexception。 这是我实施的必要部分。

IRecordServiceAsync recordSvc = GWT.create(IRecordService.class);
private class RecordCallBack implements AsyncCallback<Records> {
    public void onFailure(Throwable caught) {
        // TODO Auto-generated method stub
    }

    public void onSuccess(Records result) {
        records = result.getRecords();
    }

}
public void onModuleLoad() {
setFileGridData(getRecords());
.
.
.
}
public HashMap getRecords() {
    recordSvc.getRecords(recordclass, new RecordCallBack());
    return this.records;
}

正如我所说的,我的程序skp是onFailure和onSuccess部分,因为我的记录值变为空。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

你必须认为异步。方法getRecords()首先对您的服务进行异步调用,然后立即返回records字段,该字段始终为null(假设到目前为止从未修改过)。< / p>

您必须等待要返回的权限(由onSuccess / onFailure处理)。而且,一般情况下,永远不要使用依赖异步调用的getter,而是将应用程序设计为wait以获取响应/事件。

在您的情况下,只需将异步调用放入onModuleLoad()并仅在onSuccess()内,请使用setFileGridData(result.getRecords()),完全避免使用getter。

答案 1 :(得分:1)

您正在创建新的RecordCallBack.So onFailure,并且将在新实例上调用onSuccess。而不是这样做,您可以尝试按照

public void getRecords() {
    recordSvc.getRecords(recordclass, this);
}

答案 2 :(得分:1)

经过所有解释后

您的代码应该

onModuleLoad(){
  recordSvc.getRecords(new RecordCallBack<Records>(){


 public void onFailure(Throwable caught) {
        // TODO Auto-generated method stub
    }

    public void onSuccess(Records result) {
        records = result.getRecords();
        setFileGridData(records);
    }

});

}