Index: /trunk/build.xml
===================================================================
--- /trunk/build.xml	(revision 12267)
+++ /trunk/build.xml	(revision 12268)
@@ -144,5 +144,5 @@
                 <attribute name="Application-Name" value="JOSM - Java OpenStreetMap Editor"/>
                 <!-- Java 9 stuff. Entries are safely ignored by Java 8 -->
-                <attribute name="Add-Exports" value="java.base/sun.security.util java.desktop/com.sun.imageio.spi jdk.deploy/com.sun.deploy.config" />
+                <attribute name="Add-Exports" value="java.base/sun.security.util java.desktop/com.apple.eawt java.desktop/com.sun.imageio.spi jdk.deploy/com.sun.deploy.config" />
                 <attribute name="Add-Opens" value="java.base/java.lang java.base/jdk.internal.loader java.base/sun.security.x509 java.desktop/javax.imageio.spi java.desktop/javax.swing.text.html java.prefs/java.util.prefs" />
             </manifest>
Index: /trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java	(revision 12267)
+++ /trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java	(revision 12268)
@@ -60,19 +60,17 @@
             Object proxy = Proxy.newProxyInstance(PlatformHookOsx.class.getClassLoader(), new Class<?>[] {
                 quitHandler, aboutHandler, openFilesHandler, preferencesHandler}, ivhandler);
-            try {
-                Object appli = eawtApplication.getConstructor((Class[]) null).newInstance((Object[]) null);
+            Object appli = eawtApplication.getConstructor((Class[]) null).newInstance((Object[]) null);
+            if (Utils.getJavaVersion() >= 9) {
+                setHandlers(Desktop.class, quitHandler, aboutHandler, openFilesHandler, preferencesHandler, proxy, Desktop.getDesktop());
+            } else {
                 setHandlers(eawtApplication, quitHandler, aboutHandler, openFilesHandler, preferencesHandler, proxy, appli);
-                // this method has been deprecated, but without replacement ATM
+                // this method has been deprecated, but without replacement. To remove with Java 9 migration
                 eawtApplication.getDeclaredMethod("setEnabledPreferencesMenu", boolean.class).invoke(appli, Boolean.TRUE);
-                // setup the dock icon. It is automatically set with application bundle and Web start but we need
-                // to do it manually if run with `java -jar``
-                eawtApplication.getDeclaredMethod("setDockIconImage", Image.class).invoke(appli, ImageProvider.get("logo").getImage());
-                // enable full screen
-                enableOSXFullscreen((Window) Main.parent);
-            } catch (IllegalAccessException e) {
-                Main.debug(e);
-                // with Java 9, module java.desktop does not export com.apple.eawt, use new Desktop API instead
-                setHandlers(Desktop.class, quitHandler, aboutHandler, openFilesHandler, preferencesHandler, proxy, Desktop.getDesktop());
             }
+            // setup the dock icon. It is automatically set with application bundle and Web start but we need
+            // to do it manually if run with `java -jar``
+            eawtApplication.getDeclaredMethod("setDockIconImage", Image.class).invoke(appli, ImageProvider.get("logo").getImage());
+            // enable full screen
+            enableOSXFullscreen((Window) Main.parent);
         } catch (ReflectiveOperationException | SecurityException | IllegalArgumentException ex) {
             // We'll just ignore this for now. The user will still be able to close JOSM by closing all its windows.
@@ -112,7 +110,9 @@
     protected Class<?> findHandlerClass(String className) throws ClassNotFoundException {
         try {
+            // Java 8 handlers
             return Class.forName("com.apple.eawt."+className);
         } catch (ClassNotFoundException e) {
             Main.trace(e);
+            // Java 9 handlers
             return Class.forName("java.awt.desktop."+className);
         }
