繁体   English   中英

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

[英]Waiting for a thread to finish from a 3rd party library (OpenMap/Java)?

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

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

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

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

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

我假设某种类型的线程管理是有序的,但是当库使用自己无法访问的线程时,该怎么办呢? 另外,OpenMap没有返回或标志来指示这些线程已完成(我已经看到)。

有什么建议么?

谢谢

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

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

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

在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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM