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
答案 0 :(得分:3)
当你/如果你要求你的妻子/女朋友给你带啤酒时,在你问她之后你手上没有那个啤酒,你可以继续观看比赛并做出反应,你不会被阻止等待你的啤酒:这叫做异步处理。
同样,发送RPC调用后,connection
仍然是null
。
请参阅https://groups.google.com/d/msg/Google-Web-Toolkit/-soVdfMGug8/vRmqIcAZ5zsJ
答案 1 :(得分:1)
setConnectionnull
这是因为回调函数是异步执行的。也就是说,在响应从服务器到浏览器之后调用此函数。但代码的其他部分如
connection=loginServer.getConnection();
立即执行连接仍然为空。
谢谢, 内甚