X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FLaunchUtils.java;h=e4f393c43dbff1520c391aeed80617ff69ec3ba3;hb=032527014a1eafae4110666a53aad60992a29576;hp=eb43363ad1f7771af5b0044d83b92c9a8299edfe;hpb=91bb9b5c473c14f3381fbea3570b4dc1875b68f2;p=jalview.git diff --git a/src/jalview/util/LaunchUtils.java b/src/jalview/util/LaunchUtils.java index eb43363..e4f393c 100644 --- a/src/jalview/util/LaunchUtils.java +++ b/src/jalview/util/LaunchUtils.java @@ -34,6 +34,16 @@ import jalview.bin.Console; public class LaunchUtils { + // setting these is LaunchUtils so don't need to import Platform + public final static boolean isMac = System.getProperty("os.name") + .indexOf("Mac") > -1; + + public final static boolean isWindows = System.getProperty("os.name") + .indexOf("Win") > -1; + + private static boolean isJS = /** @j2sNative true || */ + false; + public static void loadChannelProps(File dir) { ChannelProperties.loadProps(dir); @@ -67,7 +77,7 @@ public class LaunchUtils return null; } catch (IOException e) { - System.err.println(e.getMessage()); + jalview.bin.Console.errPrintln(e.getMessage()); return null; } } @@ -83,7 +93,7 @@ public class LaunchUtils public static int getJavaCompileVersion() { - if (Platform.isJS()) + if (LaunchUtils.isJS) { return -1; } @@ -105,22 +115,22 @@ public class LaunchUtils null); if (JCV == null) { - Console.outputMessage( + Console.errPrintln( "Could not obtain JAVA_COMPILE_VERSION for comparison"); return -2; } JAVA_COMPILE_VERSION = Integer.parseInt(JCV); } catch (MalformedURLException e) { - System.err.println("Could not find " + buildDetails); + jalview.bin.Console.errPrintln("Could not find " + buildDetails); return -3; } catch (IOException e) { - System.err.println("Could not load " + buildDetails); + jalview.bin.Console.errPrintln("Could not load " + buildDetails); return -4; } catch (NumberFormatException e) { - System.err.println("Could not parse JAVA_COMPILE_VERSION"); + jalview.bin.Console.errPrintln("Could not parse JAVA_COMPILE_VERSION"); return -5; } @@ -131,7 +141,7 @@ public class LaunchUtils public static int getJavaVersion() { - if (Platform.isJS()) + if (LaunchUtils.isJS) { return -1; } @@ -144,8 +154,7 @@ public class LaunchUtils String JV = System.getProperty("java.version"); if (JV == null) { - Console.outputMessage( - "Could not obtain java.version for comparison"); + Console.errPrintln("Could not obtain java.version for comparison"); return -2; } if (JV.startsWith("1.")) @@ -156,7 +165,7 @@ public class LaunchUtils : Integer.parseInt(JV.substring(0, JV.indexOf("."))); } catch (NumberFormatException e) { - System.err.println("Could not parse java.version"); + jalview.bin.Console.errPrintln("Could not parse java.version"); return -3; } return JAVA_VERSION; @@ -164,7 +173,7 @@ public class LaunchUtils public static boolean checkJavaVersion() { - if (Platform.isJS()) + if (LaunchUtils.isJS) { return true; } @@ -177,7 +186,7 @@ public class LaunchUtils if (java_compile_version <= 0 || java_version <= 0) { - Console.outputMessage("Could not make Java version check"); + Console.errPrintln("Could not make Java version check"); return true; } // Warn if these java.version and JAVA_COMPILE_VERSION conditions exist @@ -189,4 +198,88 @@ public class LaunchUtils return true; } + + public static String findJavaBin(boolean winConsole) + { + return findJavaBin(System.getProperty("java.home"), winConsole, true); + } + + /* + * Returns a string path to the most likely java binary wanted to run this + * installation of Jalview. + * + * @param winConsole whether to use java.exe (console) in preference to javaw.exe + * (only affects Windows). + * @param javaHome Try this javaHome dir (defaults to the running java.home). + * @param generic Return a generic java command if not found. + */ + public static String findJavaBin(String javaHome, boolean winConsole, + boolean generic) + { + String javaBin = null; + final String javaExe = winConsole ? "java.exe" : "javaw.exe"; + final String java = "java"; + + if (javaHome != null) + { + // property "channel.app_name" is set by install4j when launching getdown + String propertyAppName = System.getProperty("channel.app_name"); + final String appName = (propertyAppName != null + && propertyAppName.length() > 0) ? propertyAppName + : ChannelProperties.getProperty("app_name"); + + final String javaBinDir = javaHome + File.separator + "bin" + + File.separator; + + // appName and "Jalview" will not point to javaw.exe or java.exe but in + // this case that's okay because the taskbar display name problem doesn't + // manifest in Windows. See JAL-3820, JAL-4189. + for (String name : new String[] { appName, "Jalview", java, javaExe }) + { + if (LaunchUtils.checkJVMSymlink(javaBinDir + name, winConsole)) + { + javaBin = javaBinDir + name; + break; + } + } + } + + if (javaBin == null && generic) + { + javaBin = LaunchUtils.isWindows ? javaExe : java; + } + + return javaBin; + } + + /* + * checkJVMSymlink returns true if the path in testBin *is* a java binary, or + * points to a java binary. + * @param testBin The binary or symbolic link to check + * @param winConsole whether we are in/want a Windows console (only relevant for Windows, + * determines whether we use java.exe or javaw.exe) + */ + private static boolean checkJVMSymlink(String testBin, boolean winConsole) + { + File testBinFile = new File(testBin); + if (!testBinFile.exists()) + { + return false; + } + File targetFile = null; + try + { + targetFile = testBinFile.getCanonicalFile(); + } catch (IOException e) + { + return false; + } + final String javaExe = winConsole ? "java.exe" : "javaw.exe"; + if (targetFile != null && ("java".equals(targetFile.getName()) + || javaExe.equals(targetFile.getName()))) + { + return true; + } + return false; + } }