JAL-3820 add java and java.exe from JAVAHOME to list of likely JVMs
[jalview.git] / src / jalview / bin / Launcher.java
index a87d322..c333e2e 100644 (file)
@@ -50,6 +50,8 @@ public class Launcher
 {
   private final static String startClass = "jalview.bin.Jalview";
 
+  private final static String headlessProperty = "java.awt.headless";
+
   private static boolean checkJVMSymlink(String testBin)
   {
     File testBinFile = new File(testBin);
@@ -94,13 +96,14 @@ public class Launcher
     final String javaBinDir = System.getProperty("java.home")
             + File.separator + "bin" + File.separator;
     String javaBin = null;
-    if (javaBin == null && checkJVMSymlink(javaBinDir + appName))
-    {
-      javaBin = javaBinDir + appName;
-    }
-    if (javaBin == null && checkJVMSymlink(javaBinDir + "Jalview"))
+    for (String name : new String[] { appName, "Jalview", "java",
+        "java.exe" })
     {
-      javaBin = javaBinDir + "Jalview";
+      if (checkJVMSymlink(javaBinDir + name))
+      {
+        javaBin = javaBinDir + name;
+        break;
+      }
     }
     if (javaBin == null)
     {
@@ -127,6 +130,8 @@ public class Launcher
     boolean debug = false;
     boolean wait = true;
     boolean quiet = false;
+    boolean headless = false;
+    boolean gui = false;
     // must set --debug before --launcher...
     boolean launcherstop = false;
     boolean launcherprint = false;
@@ -142,6 +147,14 @@ public class Launcher
       {
         quiet = true;
       }
+      if (arg.equals("--headless"))
+      {
+        headless = true;
+      }
+      if (arg.equals("--gui"))
+      {
+        gui = true;
+      }
       if (debug && arg.equals("--launcherprint"))
       {
         launcherprint = true;
@@ -199,6 +212,11 @@ public class Launcher
         arguments.add(arg);
       }
     }
+    if (gui)
+    {
+      // --gui takes precedence over --headless
+      headless = false;
+    }
 
     // use saved preferences if no cmdline args
     boolean useCustomisedSettings = LaunchUtils
@@ -221,6 +239,7 @@ public class Launcher
     boolean memSet = false;
     boolean dockIcon = false;
     boolean dockName = false;
+    boolean headlessProp = false;
     for (int i = 0; i < command.size(); i++)
     {
       String arg = command.get(i);
@@ -241,6 +260,10 @@ public class Launcher
       {
         dockName = true;
       }
+      else if (arg.startsWith("-D" + headlessProperty + "="))
+      {
+        headlessProp = true;
+      }
     }
 
     if (!memSet)
@@ -276,6 +299,11 @@ public class Launcher
                 + appName);
       }
     }
+    if (headless && !headlessProp)
+    {
+      System.setProperty(headlessProperty, "true");
+      command.add("-D" + headlessProperty + "=true");
+    }
 
     String scalePropertyArg = HiDPISetting.getScalePropertyArg();
     if (scalePropertyArg != null)