Java GWT RPC AsynCallback跳过onSucces和onFail方法

Java GWT RPC AsynCallback跳过onSucces和onFail方法,java,gwt,asynchronous,callback,rpc,Java,Gwt,Asynchronous,Callback,Rpc,我尝试编写一个GWT应用程序,需要使用RPC从服务器端获取结果。我遵循了GWT RPC教程,最终得到了一些产品。但是当我调试我的程序时,我看到我的程序跳过了onFailure和onSuccess方法,所以我得到了nullpointerexception。 以下是我实现的必要部分 IRecordServiceAsync recordSvc = GWT.create(IRecordService.class); private class RecordCallBack implements Asyn

我尝试编写一个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;
}
IRecordServiceAsync recordSvc=GWT.create(IRecordService.class);
私有类RecordCallBack实现异步回调{
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
成功时公开作废(记录结果){
records=result.getRecords();
}
}
moduleload()上的公共void{
setFileGridData(getRecords());
.
.
.
}
公共HashMap getRecords(){
getRecords(recordclass,new RecordCallBack());
将此文件归还给您的记录;
}
正如我所说,我的程序skpis是onFailure和onSuccess部分,因为我的记录值变为null


谢谢您的帮助。

您正在创建新的RecordCallBack。因此,将对新实例调用onFailure和onSuccess。您可以尝试以下操作,而不是执行此操作

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

您正在创建新的RecordCallBack。因此将对新实例调用onFailure和onSuccess。您可以尝试以下操作,而不是这样做

public void getRecords() {
    recordSvc.getRecords(recordclass, this);
}
你必须异步思考。方法
getRecords()
,首先对您的服务进行异步调用,然后立即返回
records
字段,该字段将始终为空(假设到目前为止从未修改)

您必须等待响应返回(由
onSuccess
/
onFailure
处理)。一般来说,不要使用依赖异步调用的getter,而是将应用程序设计为等待响应/事件

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

您必须异步思考。方法
getRecords()
,首先对您的服务进行异步调用,然后立即返回
records
字段,该字段将始终为空(假设到目前为止从未修改)

您必须等待响应返回(由
onSuccess
/
onFailure
处理)。一般来说,不要使用依赖异步调用的getter,而是将应用程序设计为等待响应/事件


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

您的代码应该

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);
    }

});

}
onModuleLoad(){
getRecords(新的RecordCallBack(){
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
成功时公开作废(记录结果){
records=result.getRecords();
setFileGridData(记录);
}
});
}

在所有的解释之后

您的代码应该

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);
    }

});

}
onModuleLoad(){
getRecords(新的RecordCallBack(){
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
}
成功时公开作废(记录结果){
records=result.getRecords();
setFileGridData(记录);
}
});
}

Hint:asynchronous==non-blocking.Hint:asynchronous==non-blocking.mable replication of Hint:asynchronous==non-blocking.I可能重复我已经尝试过了,但recordclass variable的值仍然为空。我刚刚更正了您所说的部分,但没有任何更改。你需要哪一部分?我会编辑它。我试过了,但是我仍然得到了recordclass变量的空值。我刚刚更正了你说的部分,但是没有任何改变。你需要哪一部分?我会编辑它。我在“recordSvc.getRecords(recordclass,this);”中添加了这一行onModuleLoad和我添加了setFileGridData(getRecords());对于onSuccess,我还调用了onSuccess(recordclass);这在filegrid进程中非常重要。我明白你想说什么,但我想我无法实现我的代码。这仍然提供空值。您不必调用
onSuccess()
。我在“recordSvc.getRecords(recordclass,this);”中添加了这一行onModuleLoad和我添加了setFileGridData(getRecords());对于onSuccess,我还调用了onSuccess(recordclass);这在filegrid进程中非常重要。我明白你想说什么,但我想我无法实现我的代码。这仍然提供空值。您不必调用
onSuccess()
。当响应将从服务器返回时,它将返回。