0

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

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

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

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

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

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

有什么建议么?

谢谢

4

3 回答 3

1

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

于 2010-01-20T17:36:18.173 回答
1

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

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

于 2010-01-21T02:42:48.593 回答
1

在 MapBean 完成生成图像之前,第 3 方 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 );
于 2011-10-26T00:49:51.550 回答