等待线程从第三方库(OpenMap / Java)完成?

时间:2010-01-20 17:29:51

标签: java multithreading openmap

我的申请目前有一个有趣的问题。这个问题与OpenMap有关,但可能适用于任何第三方库。

在这个特定示例中,我们的代码需要创建我们的OpenMap工具并加载其图层(在后台)并截取特定兴趣点的屏幕截图。

然而,问题是OpenMap库创建了自己的线程来加载这些层,因此返回我们的代码立即截取屏幕截图,大多数情况下屏幕截图是空的或不完整的。

我们的应用程序的伪代码是这样的:

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

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

有什么建议吗?

谢谢

3 个答案:

答案 0 :(得分:1)

我不知道OpenMap,但通常的方法是使用第三方库注册一些回调。在Java中,这意味着实现一个接口并在您调用API方法的对象上注册为侦听器。 你(几乎?)从来没有(或应该)知道关于库的内部线程处理的事情!

答案 1 :(得分:1)

可以为OpenMap编写图层,以便它们可以响应投影查询并渲染到java.awt.Graphics对象中。扩展OMGraphicHandler图层,覆盖prepare()方法,使其返回图层上投影集的OMGraphicList。如果调用Layer.renderDataForProjection(),则将呈现准备中返回的OMGraphicList。

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

答案 2 :(得分:1)

第三方jpeg提取器在MapBean生成图像之前拉动图像存在同样的问题。接下来关于调用的提示,并在我的图层处理代码和导出到图形代码之间添加了以下代码:


//...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 );