Java GWT-方法的同步返回
好的,GWT中没有同步调用 但如果我有这样的东西:Java GWT-方法的同步返回,java,gwt,rpc,gwt-rpc,synchronous,Java,Gwt,Rpc,Gwt Rpc,Synchronous,好的,GWT中没有同步调用 但如果我有这样的东西: class XXX { Config c=new Config(); c.doSomething(); } 以及类配置 public class Config { private static HashMap<String,String> map; public Config(){ final ServerProxyAsync serverProxy= GWT.create(S
class XXX {
Config c=new Config();
c.doSomething();
}
以及类配置
public class Config {
private static HashMap<String,String> map;
public Config(){
final ServerProxyAsync serverProxy= GWT.create(ServerProxy.class);
serverProxy.getParameters(new AsyncCallback<HashMap<String,String>>() {
@Override
public void onFailure(Throwable caught) {
System.out.println("getParameters: FAILED!");
map=null;
}
@Override
public void onSuccess(HashMap<String, String> result) {
System.out.println("getParameters: OK!");
map=result;
// RETURN NOW!!!!
}
});
}
公共类配置{
私有静态哈希映射;
公共配置(){
final serverproxysync serverProxy=GWT.create(serverProxy.class);
getParameters(新的AsyncCallback(){
@凌驾
失败时的公共无效(可丢弃){
System.out.println(“getParameters:FAILED!”);
map=null;
}
@凌驾
成功时的公共void(哈希映射结果){
System.out.println(“getParameters:OK!”);
map=结果;
//现在就回来!!!!
}
});
}
如果异步调用没有终止,我就不能执行doSomething()
,因为有时在初始化映射之前调用该方法。
有办法吗?在
onSuccess()中doSomething()
怎么样
您不能在GWT中使用同步调用。
即使您进行了一些操作,但这不是一个好的做法
需要时,您必须执行RPC调用的onSuccess();
中的操作
因此,最好的方法是简单地使用异步方法,并通过提供的回调继续执行。最终您将获得更好的用户体验,并呈现出更专业的外观
应用程序。只需扩展您的Config
类,以获取Runnable
或回调
public class Config {
private static HashMap<String,String> map;
private final Runnable callback;
public Config(Runnable callback){
this.run = run;
final ServerProxyAsync serverProxy= GWT.create(ServerProxy.class);
serverProxy.getParameters(new AsyncCallback<HashMap<String,String>>() {
@Override
public void onFailure(Throwable caught) {
System.out.println("getParameters: FAILED!");
map=null;
}
@Override
public void onSuccess(HashMap<String, String> result) {
System.out.println("getParameters: OK!");
map=result;
callback.run();
}
});
}
}
class XXX {
final Runnable callback = new Runnable() {
@Override
public void run() {
dosomething1();
}
};
Config c=new Config(callback);
}
谢谢你的回答。不幸的是,我不能将doSomething()放在onSuccess()中,因为有时我需要调用doSomething1()和doSomething2()…Config这是一个初始化我的应用程序的一些参数的类,我需要将它用于不同的目的。@nap.gab我认为你所说的不是一个无法解决的问题。我在开发GWT时遇到过这样的问题,我可以解决它们。也许你应该问一个新的、更具体的问题,并提供更多细节。