Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT-方法的同步返回_Java_Gwt_Rpc_Gwt Rpc_Synchronous - Fatal编程技术网

Java 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

好的,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(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时遇到过这样的问题,我可以解决它们。也许你应该问一个新的、更具体的问题,并提供更多细节。