【问题标题】:Concurrency Issue plotting google maps GeoCoder request on Google Maps Widget在 Google Maps Widget 上绘制 google maps GeoCoder 请求的并发问题
【发布时间】:2009-11-22 23:45:30
【问题描述】:

我的程序基本上有 3 个步骤: 1)查询Geocoder对象的一些坐标并将它们存储在一个集合中 2) 将结果发送到我的主模块以在地图上绘图 3)在谷歌地图小部件上绘制它们

为了处理地理编码,我创建了一个 Requestor 类——这个类有一个 getResults() 函数,它返回一个坐标的 ArrayList 给我的主模块,以便在地图上绘制。
但是,当我尝试在 onModuleLoad() 方法的范围内执行所有 3 个步骤时,我遇到了并发问题并从结果集中提取空结果。我已经使用一组 3 个按钮(请求、拉取结果和绘图)来完成这项工作,但希望在模块加载时自动触发它们。
我怀疑这与触发事件和在适当的位置放置处理程序有关;如果是这种情况,请提供一个具体的例子,因为我试图找到一个关于 EventHandlers 的好教程,但遇到了一些困难。

【问题讨论】:

  • 我已经使用计时器和 5000 毫秒的时间表解决了这个问题...有没有更好的方法来做到这一点?

标签: java javascript gwt google-maps concurrency


【解决方案1】:

听起来Requestor类是异步调用的。在这种情况下,您可以使用 EventBus(使用 HandlerManager - GWT 1.6 或更高版本实现)在 GWT 中发送和订阅事件。因此,在从地理编码服务获得结果后,您可以发送带有结果的事件。期望结果的模块使用 EventBus 订阅此事件。

您可能需要查看gwt-presentergwt-dispatch 应用程序以获取实施和示例。

【讨论】:

    【解决方案2】:

    我已经使用计时器和 5000 毫秒的时间表解决了这个问题。

    我不做 GWT,所以我不能深入,但毕竟看起来你(或它)使用单独的线程来进行处理。如果这是真的,那么您基本上需要(让它)join 线程,然后再对其最终结果进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多