1

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

私が言ったように、私のプログラムは onFailure と onSuccess の部分をスキップしているため、レコードの値が null になります。

手伝ってくれてありがとう。

4

3 に答える 3

3

非同期的に考える必要があります。メソッドgetRecords()は、最初にサービスへの非同期呼び出しを実行し、すぐにrecordsフィールドを返します。これは常に null になります (これまで変更されていないと仮定します)。

respose が返されるのを待つonSuccess必要があります ( /によって処理されonFailureます)。また、一般的に、非同期呼び出しに依存するゲッターは使用せずwait、応答/イベント用にアプリを設計してください。

あなたの場合、 async 呼び出しを に入れ、 のonModuleLoad()内部にのみ入れonSuccess()、 を使用しsetFileGridData(result.getRecords())て、ゲッターをまったく避けます。

于 2013-04-12T08:53:36.497 に答える
1

新しい RecordCallBack を作成しています。そのため、新しいインスタンスで onFailure と onSuccess が呼び出されます。それを行う代わりに、次のことを試すことができます。

public void getRecords() {
    recordSvc.getRecords(recordclass, this);
}
于 2013-04-12T08:46:42.643 に答える