Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java	(revision 16152)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/MapImage.java	(revision 16153)
@@ -10,4 +10,6 @@
 import java.awt.image.BufferedImage;
 import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
 
 import javax.swing.ImageIcon;
@@ -22,4 +24,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageResource;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -115,7 +118,17 @@
     /**
      * Get the image resource associated with this MapImage object.
+     * This method blocks until the image has been loaded.
      * @return the image resource
      */
     public ImageResource getImageResource() {
+        if (imageResource == null) {
+            try {
+                // load and wait for the image
+                loadImage().get();
+            } catch (ExecutionException | InterruptedException e) {
+                Logging.warn(e);
+                Thread.currentThread().interrupt();
+            }
+        }
         return imageResource;
     }
@@ -142,5 +155,16 @@
             return img;
         temporary = false;
-        new ImageProvider(name)
+        loadImage();
+        synchronized (this) {
+            if (img == null) {
+                img = ImageProvider.get("clock").getImage();
+                temporary = true;
+            }
+        }
+        return img;
+    }
+
+    private CompletableFuture<Void> loadImage() {
+        return new ImageProvider(name)
                 .setDirs(MapPaintStyles.getIconSourceDirs(source))
                 .setId("mappaint."+source.getPrefName())
@@ -168,11 +192,4 @@
                 }
         );
-        synchronized (this) {
-            if (img == null) {
-                img = ImageProvider.get("clock").getImage();
-                temporary = true;
-            }
-        }
-        return img;
     }
 
