Index: /trunk/src/org/openstreetmap/josm/tools/HiDPISupport.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/HiDPISupport.java	(revision 16330)
+++ /trunk/src/org/openstreetmap/josm/tools/HiDPISupport.java	(revision 16331)
@@ -13,5 +13,4 @@
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.UnaryOperator;
@@ -31,7 +30,13 @@
 public final class HiDPISupport {
 
-    private static volatile Optional<Class<? extends Image>> baseMultiResolutionImageClass;
-    private static volatile Optional<Constructor<? extends Image>> baseMultiResolutionImageConstructor;
-    private static volatile Optional<Method> resolutionVariantsMethod;
+    private static final Class<? extends Image> baseMultiResolutionImageClass;
+    private static final Constructor<? extends Image> baseMultiResolutionImageConstructor;
+    private static final Method resolutionVariantsMethod;
+
+    static {
+        baseMultiResolutionImageClass = initBaseMultiResolutionImageClass();
+        baseMultiResolutionImageConstructor = initBaseMultiResolutionImageConstructor();
+        resolutionVariantsMethod = initResolutionVariantsMethod();
+    }
 
     private HiDPISupport() {
@@ -51,5 +56,5 @@
     public static Image getMultiResolutionImage(Image base, ImageResource ir) {
         double uiScale = getHiDPIScale();
-        if (uiScale != 1.0 && getBaseMultiResolutionImageConstructor().isPresent()) {
+        if (uiScale != 1.0 && baseMultiResolutionImageConstructor != null) {
             ImageIcon zoomed = ir.getImageIcon(new Dimension(
                     (int) Math.round(base.getWidth(null) * uiScale),
@@ -70,8 +75,7 @@
     public static Image getMultiResolutionImage(List<Image> imgs) {
         CheckParameterUtil.ensureThat(!imgs.isEmpty(), "imgs is empty");
-        Optional<Constructor<? extends Image>> baseMrImageConstructor = getBaseMultiResolutionImageConstructor();
-        if (baseMrImageConstructor.isPresent()) {
+        if (baseMultiResolutionImageConstructor != null) {
             try {
-                return baseMrImageConstructor.get().newInstance((Object) imgs.toArray(new Image[0]));
+                return baseMultiResolutionImageConstructor.newInstance((Object) imgs.toArray(new Image[0]));
             } catch (InstantiationException | IllegalAccessException | InvocationTargetException ex) {
                 Logging.error("Unexpected error while instantiating object of class BaseMultiResolutionImage: " + ex);
@@ -90,13 +94,11 @@
      */
     public static Image getBaseImage(Image img) {
-        Optional<Class<? extends Image>> baseMrImageClass = getBaseMultiResolutionImageClass();
-        Optional<Method> resVariantsMethod = getResolutionVariantsMethod();
-        if (!baseMrImageClass.isPresent() || !resVariantsMethod.isPresent()) {
+        if (baseMultiResolutionImageClass == null || resolutionVariantsMethod == null) {
             return img;
         }
-        if (baseMrImageClass.get().isInstance(img)) {
+        if (baseMultiResolutionImageClass.isInstance(img)) {
             try {
                 @SuppressWarnings("unchecked")
-                List<Image> imgVars = (List<Image>) resVariantsMethod.get().invoke(img);
+                List<Image> imgVars = (List<Image>) resolutionVariantsMethod.invoke(img);
                 if (!imgVars.isEmpty()) {
                     return imgVars.get(0);
@@ -119,13 +121,11 @@
      */
     public static List<Image> getResolutionVariants(Image img) {
-        Optional<Class<? extends Image>> baseMrImageClass = getBaseMultiResolutionImageClass();
-        Optional<Method> resVariantsMethod = getResolutionVariantsMethod();
-        if (!baseMrImageClass.isPresent() || !resVariantsMethod.isPresent()) {
+        if (baseMultiResolutionImageClass == null || resolutionVariantsMethod == null) {
             return Collections.singletonList(img);
         }
-        if (baseMrImageClass.get().isInstance(img)) {
+        if (baseMultiResolutionImageClass.isInstance(img)) {
             try {
                 @SuppressWarnings("unchecked")
-                List<Image> imgVars = (List<Image>) resVariantsMethod.get().invoke(img);
+                List<Image> imgVars = (List<Image>) resolutionVariantsMethod.invoke(img);
                 if (!imgVars.isEmpty()) {
                     return imgVars;
@@ -189,5 +189,5 @@
     public static Image processMRImages(List<Image> imgs, Function<List<Image>, Image> processor) {
         CheckParameterUtil.ensureThat(!imgs.isEmpty(), "at least one element expected");
-        if (!getBaseMultiResolutionImageClass().isPresent()) {
+        if (baseMultiResolutionImageClass != null) {
             return processor.apply(imgs);
         }
@@ -205,63 +205,35 @@
     }
 
-    private static Optional<Class<? extends Image>> getBaseMultiResolutionImageClass() {
-        if (baseMultiResolutionImageClass == null) {
-            synchronized (HiDPISupport.class) {
-                if (baseMultiResolutionImageClass == null) {
-                    try {
-                        @SuppressWarnings("unchecked")
-                        Class<? extends Image> c = (Class<? extends Image>) Class.forName("java.awt.image.BaseMultiResolutionImage");
-                        baseMultiResolutionImageClass = Optional.ofNullable(c);
-                    } catch (ClassNotFoundException ex) {
-                        // class is not present in Java 8
-                        baseMultiResolutionImageClass = Optional.empty();
-                        Logging.trace(ex);
-                    }
-                }
-            }
-        }
-        return baseMultiResolutionImageClass;
-    }
-
-    private static Optional<Constructor<? extends Image>> getBaseMultiResolutionImageConstructor() {
-        if (baseMultiResolutionImageConstructor == null) {
-            synchronized (HiDPISupport.class) {
-                if (baseMultiResolutionImageConstructor == null) {
-                    getBaseMultiResolutionImageClass().ifPresent(klass -> {
-                        try {
-                            Constructor<? extends Image> constr = klass.getConstructor(Image[].class);
-                            baseMultiResolutionImageConstructor = Optional.ofNullable(constr);
-                        } catch (NoSuchMethodException ex) {
-                            Logging.error("Cannot find expected constructor: " + ex);
-                        }
-                    });
-                    if (baseMultiResolutionImageConstructor == null) {
-                        baseMultiResolutionImageConstructor = Optional.empty();
-                    }
-                }
-            }
-        }
-        return baseMultiResolutionImageConstructor;
-    }
-
-    private static Optional<Method> getResolutionVariantsMethod() {
-        if (resolutionVariantsMethod == null) {
-            synchronized (HiDPISupport.class) {
-                if (resolutionVariantsMethod == null) {
-                    getBaseMultiResolutionImageClass().ifPresent(klass -> {
-                        try {
-                            Method m = klass.getMethod("getResolutionVariants");
-                            resolutionVariantsMethod = Optional.ofNullable(m);
-                        } catch (NoSuchMethodException ex) {
-                            Logging.error("Cannot find expected method: "+ex);
-                        }
-                    });
-                    if (resolutionVariantsMethod == null) {
-                        resolutionVariantsMethod = Optional.empty();
-                    }
-                }
-            }
-        }
-        return resolutionVariantsMethod;
+    @SuppressWarnings("unchecked")
+    private static Class<? extends Image> initBaseMultiResolutionImageClass() {
+        try {
+            return (Class<? extends Image>) Class.forName("java.awt.image.BaseMultiResolutionImage");
+        } catch (ClassNotFoundException ex) {
+            // class is not present in Java 8
+            Logging.trace(ex);
+            return null;
+        }
+    }
+
+    private static Constructor<? extends Image> initBaseMultiResolutionImageConstructor() {
+        try {
+            return baseMultiResolutionImageClass != null
+                    ? baseMultiResolutionImageClass.getConstructor(Image[].class)
+                    : null;
+        } catch (NoSuchMethodException ex) {
+            Logging.error("Cannot find expected constructor: " + ex);
+            return null;
+        }
+    }
+
+    private static Method initResolutionVariantsMethod() {
+        try {
+            return baseMultiResolutionImageClass != null
+                    ? baseMultiResolutionImageClass.getMethod("getResolutionVariants")
+                    : null;
+        } catch (NoSuchMethodException ex) {
+            Logging.error("Cannot find expected method: " + ex);
+            return null;
+        }
     }
 }
