代码之家  ›  专栏  ›  技术社区  ›  thedude19

正在等待来自第三方库(OpenMap/Java)的线程完成?

  •  0
  • thedude19  · 技术社区  · 16 年前

    我的应用程序目前有一个有趣的问题。此问题与OpenMap有关,但可能适用于任何第三方库。

    在这个特定的例子中,我们的代码需要创建OpenMap工具并加载它的层(在后台),并截屏一个特定的关注点。

    但是,问题是OpenMap库创建了自己的线程来加载这些层,从而返回到我们的代码中立即截图,而且大多数情况下截图是空的或不完整的。

    check database for layers
    load layers using OpenMap
    take screenshot of map at point of interest
    

    我假设某种类型的线程管理是有序的,但是当库使用自己的线程而我们没有访问权限时,如何做到这一点呢?此外,OpenMap没有返回或标志来指示这些线程已完成(我已经看到)。

    谢谢你

    3 回复  |  直到 16 年前
        1
  •  1
  •   FRotthowe    16 年前

    我不知道OpenMap,但通常的方法是向第三方库注册一些回调。在Java中,这意味着实现一个接口,并在调用API方法的对象上注册为侦听器。 你(几乎?)永远不必(或者应该)了解库的内部线程处理!

        2
  •  1
  •   user255437 user255437    16 年前

    com.bbn.openmap.image.ImageServer是一个很好的对象,可用于管理图层图像的创建。

        3
  •  1
  •   Denny    14 年前

    在MapBean生成图像之前,第三方jpeg提取程序提取图像时也遇到了同样的问题。遵循稍后关于调用的提示,并在“我的层处理代码”和“我的导出到图形代码”之间添加了以下代码:


    //...OpenMap editing code stops here ...
    
    final Runnable doWaitUntilTheMapBeanIsFinishedRendering = new Runnable() {
       public void run()
       {
           System.out.println("Ding, fries are done!");
       } 
    };
    
    try
    {
        SwingUtilities.invokeAndWait( doWaitUntilTheMapBeanIsFinishedRendering );
    }
    catch( Exception e )
    {
        e.printStackTrace();
    }
    
    byte[] image = JPEGImageFormatter.getImageFromMapBean( mapbean );