2011-04-18 86 views
1

如何将result.getDistance()。inMeters()的结果保存为距离?将回调存储到变量

public class Route { 
    private double distance; 
    public Route() { 
    distance = 0; 
    run(); 
    } 

    public void run() { 
    Directions.load(query, opts, new DirectionsCallback() { 

     public void onFailure(int statusCode) { 
     Window.alert("Failed to route locations: " 
     + StatusCodes.getName(statusCode) + " " + statusCode); 
     } 

     public void onSuccess(DirectionResults result) { 
      distance = result.getDistance().inMeters(); 
     } 

    ); 
    } 
    public double getDistance() { 
    return distance; 
    } 
} 

在我的主要的Java文件,每当我做

Route route = new Route(); 
double distance = route.getDistance(); 

距离将始终为0

+1

“在我的主要的Java文件,每当我做 路由路径=新干线() ; double distance = route.getDistance(); distance将始终为0。 当然,因为在构造函数Route()中将变量距离初始化为0; – dominicbri7 2011-04-18 15:18:44

+0

'Directions.load()'是否启动一个新线程?如果是这样,你需要等到它完成之前,你距离。 – rsp 2011-04-18 15:21:57

回答

3

@dominic的评论是正确的:

“在我的主java文件,每当我做Route route = new Route(); double distance = route.getDistance();的距离将永远是0.“当然,由于可变距离在构造函数Route()中初始化为0;

你需要等待onSuccess回调执行之前getDistance()可以返回一个非零值。这个问题的典型解决方案只是执行一个依赖于getDistance()回调自身内部的代码:

public void onSuccess(DirectionResults result) { 
    distance = result.getDistance().inMeters(); 
    doStuffThatDependsOn(distance); 
} 
0

您可以使用synchronized块,直到的onSuccess的一个或onFailure处被调用。

在运行

()方法中添加:

synchronized(this) { 
    wait(); 
} catch (InterruptedException e) { 
... 
} 

而在的onSuccess和onFailure处添加:

synchronized(Route.class.this) { 
    notify(); 
} 
+2

GWT编译成JavaScript并在单线程中在浏览器中运行。 – z00bs 2011-04-19 10:29:06