No preference; that is a tricky problem - I understand wanting to take a copy
so that we remain independent of the original.
I expect the legend implementation was done quickly for populations at risk
project and never suffered much review.
Two long term ideas -
a) Can we do that draw map outside of the display thread?
b) Do you want to try copying the cached info as part of the map being cloned?
Report the bug; and you have commit access to commit your fix directly.
--
Jody Garnett
On Friday, 7 September 2012 at 3:44 AM, Emily Gouge wrote:
>
> When rendering a map with a raster layer and a legend using
> ApplicationGIS.drawMap function I get the exception listed below.
>
> From my debugging this seems to be a result of drawMap cloning the map
> layers/resources. When rendering glyphs for the raster layer it
> requires the raster layers georesource info. This is a problem because
> the cloned georesource does not have any cached info and IGeResource
> does not allow you to create the info in the display thread. (The
> generate glyph code is run in the Display thread).
>
> I have resolved this locally by adding the following lines to the
> LegendGraphic.draw(...) function just after the "String layerId =
> getLayerId(layer);"
>
> try {
> layer.getGeoResources().get(0).getInfo(null);
> } catch (IOException e1) {
> //eatme
> }
>
>
>
> It seems the other alternative is to add similar lines of code to the
> ApplicationGIS.drawMap function.
>
> Any preference? If this fix is okay I can create a bug report/pull request.
>
>
> Emily
>
> org.eclipse.swt.SWTException: Failed to execute runnable
> (java.lang.IllegalStateException: Lookup of getInfo not available from
> the display thread)
> at org.eclipse.swt.SWT.error(SWT.java:4282)
> at org.eclipse.swt.SWT.error(SWT.java:4197)
> at
> org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
> at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
> at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
> at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
> at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
> at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
> at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
> at
> org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> at
> org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
> at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
> at org.wcs.smart.SmartApp.start(SmartApp.java:46)
> at
> org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
> at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
> at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
> Caused by: java.lang.IllegalStateException: Lookup of getInfo not
> available from the display thread
> at net.refractions.udig.catalog.IGeoResource.getInfo(IGeoResource.java:221)
> at
> net.refractions.udig.project.ui.internal.LayerGeneratedGlyphDecorator.generateDefaultIcon(LayerGeneratedGlyphDecorator.java:552)
> at
> net.refractions.udig.project.ui.internal.LayerGeneratedGlyphDecorator.generateIcon(LayerGeneratedGlyphDecorator.java:393)
> at
> net.refractions.udig.legend.ui.LegendGraphic$1.run(LegendGraphic.java:274)
> at net.refractions.udig.ui.PlatformGIS$2.run(PlatformGIS.java:288)
> at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
> at
> org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
> ... 23 more
>
>
> _______________________________________________
> User-friendly Desktop Internet GIS (uDig)
> http://udig.refractions.net
> http://lists.refractions.net/mailman/listinfo/udig-devel
>
>
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel