在GWT中调用RPC之后的流程?

时间:2012-03-19 11:09:56

标签: java gwt gwt-rpc gwt2

public Class GUi(){
 // More Code

public void onClick(ClickEvent event) {

LoginServer loginServer =new  LoginServer(getTextBoxUsername().getText(),getTextBoxPassword().getText());     
loginServer.setConnection(connection);
connection=loginServer.getConnection();
System.out.println(" connected "+connection);
// More code
}

public class LoginServer {
// more code
public void setConnection(Boolean connection) {

    String[] authentication = {username,password};
    //RPC call
    connectionService.connectionServer(authentication, callbackConnection); 
    System.out.println("setConnection" + connection);
}

public Boolean getConnection() {
    return connection;
}
AsyncCallback callbackConnection = new AsyncCallback() {

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

    public void onSuccess(Object result) {
        connection=true;
        System.out.println("onSuccess + connection);

    }
};

}

输出

setConnectionnull
connected null
onSuccesstrue

据我说,输出应该是。

 onSuccesstrue
 setConnectiontrue
 connected null

因为我创建了LoginServer ;的对象然后我调用方法setConnection,其中写有RPC调用,它工作得很好。 OnSucces将更改连接的值。  然后我调用了方法getConnection

我也不明白为什么connected null

2 个答案:

答案 0 :(得分:3)

当你/如果你要求你的妻子/女朋友给你带啤酒时,在你问她之后你手上没有那个啤酒,你可以继续观看比赛并做出反应,你不会被阻止等待你的啤酒:这叫做异步处理。

同样,发送RPC调用后,connection仍然是null

请参阅https://groups.google.com/d/msg/Google-Web-Toolkit/-soVdfMGug8/vRmqIcAZ5zsJ

答案 1 :(得分:1)

setConnectionnull

这是因为回调函数是异步执行的。也就是说,在响应从服务器到浏览器之后调用此函数。但代码的其他部分如

 connection=loginServer.getConnection();

立即执行连接仍然为空。

谢谢, 内甚