Index: /trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 12829)
+++ /trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 12830)
@@ -23,4 +23,5 @@
 import java.util.Arrays;
 import java.util.Locale;
+import java.util.concurrent.ExecutionException;
 
 import org.openstreetmap.josm.Main;
@@ -34,35 +35,4 @@
 
     private String osDescription;
-
-    // rpm returns translated string "package %s is not installed\n", can't find a way to force english output
-    // translations from https://github.com/rpm-software-management/rpm
-    private static final String[] NOT_INSTALLED = {
-            "not installed",          // en
-            "no s'ha instal·lat",     // ca
-            "尚未安裝",                // cmn
-            "není nainstalován",      // cs
-            "ikke installeret",       // da
-            "nicht installiert",      // de
-            "ne estas instalita",     // eo
-            "no está instalado",      // es
-            "ole asennettu",          // fi
-            "pas installé",           // fr
-            "non è stato installato", // it
-            "はインストールされていません。",   // ja
-            "패키지가 설치되어 있지 않습니다", // ko
-            "ikke installert",        // nb
-            "nie jest zainstalowany", // pl
-            "não está instalado",     // pt
-            "не установлен",          // ru
-            "ni nameščen",            // sl
-            "nie je nainštalovaný",   // sk
-            "није инсталиран",        // sr
-            "inte installerat",       // sv
-            "kurulu değil",           // tr
-            "не встановлено",         // uk
-            "chưa cài đặt gói",       // vi
-            "未安装软件包",             // zh_CN
-            "尚未安裝"                // zh_TW
-    };
 
     @Override
@@ -127,5 +97,5 @@
             String dist = Utils.execOutput(Arrays.asList("lsb_release", "-i", "-s"));
             return "Debian".equalsIgnoreCase(dist) || "Ubuntu".equalsIgnoreCase(dist) || "Mint".equalsIgnoreCase(dist);
-        } catch (IOException e) {
+        } catch (IOException | ExecutionException | InterruptedException e) {
             // lsb_release is not available on all Linux systems, so don't log at warning level
             Logging.debug(e);
@@ -157,15 +127,16 @@
                         args = new String[] {"rpm", "-q", "--qf", "%{arch}-%{version}", packageName};
                     }
-                    String version = Utils.execOutput(Arrays.asList(args));
-                    if (version != null) {
-                        for (String notInstalled : NOT_INSTALLED) {
-                            if (version.contains(notInstalled))
-                                break;
+                    try {
+                        String version = Utils.execOutput(Arrays.asList(args));
+                        if (version != null && !version.isEmpty()) {
+                            return packageName + ':' + version;
                         }
-                        return packageName + ':' + version;
+                    } catch (ExecutionException e) {
+                        // Package does not exist, continue
+                        Logging.trace(e);
                     }
                 }
             }
-        } catch (IOException e) {
+        } catch (IOException | InterruptedException e) {
             Logging.warn(e);
         }
@@ -186,5 +157,5 @@
             return getPackageDetails("openjdk-8-jre", "java-1_8_0-openjdk", "java-1.8.0-openjdk");
         } else if (home.contains("java-9-openjdk") || home.contains("java-1.9.0-openjdk")) {
-            return getPackageDetails("openjdk-9-jre", "java-1_9_0-openjdk", "java-1.9.0-openjdk");
+            return getPackageDetails("openjdk-9-jre", "java-1_9_0-openjdk", "java-1.9.0-openjdk", "java-9-openjdk");
         } else if (home.contains("icedtea")) {
             return getPackageDetails("icedtea-bin");
Index: /trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 12829)
+++ /trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 12830)
@@ -45,4 +45,5 @@
 import java.util.List;
 import java.util.Locale;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ForkJoinPool;
@@ -867,6 +868,8 @@
      * @return the output
      * @throws IOException when there was an error, e.g. command does not exist
-     */
-    public static String execOutput(List<String> command) throws IOException {
+     * @throws ExecutionException when the return code is != 0. The output is can be retrieved in the exception message
+     * @throws InterruptedException if the current thread is {@linkplain Thread#interrupt() interrupted} by another thread while waiting
+     */
+    public static String execOutput(List<String> command) throws IOException, ExecutionException, InterruptedException {
         if (Logging.isDebugEnabled()) {
             Logging.debug(join(" ", command));
@@ -884,5 +887,9 @@
                 }
             }
-            return all != null ? all.toString() : null;
+            String msg = all != null ? all.toString() : null;
+            if (p.waitFor() != 0) {
+                throw new ExecutionException(msg, null);
+            }
+            return msg;
         }
     }
