From 12b788c1f3242e231a27ac466e20e3396589f65b Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Fri, 9 Feb 2018 18:01:26 -0800 Subject: [PATCH] Improve error handling in failure to find JRE in JAVA_HOME --- .../commons-vscode/src/jvm-util.ts | 20 +++++++++++-------- .../commons-vscode/src/launch-util.ts | 7 ++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/vscode-extensions/commons-vscode/src/jvm-util.ts b/vscode-extensions/commons-vscode/src/jvm-util.ts index b00743cbd..97e029f4c 100644 --- a/vscode-extensions/commons-vscode/src/jvm-util.ts +++ b/vscode-extensions/commons-vscode/src/jvm-util.ts @@ -103,6 +103,7 @@ export function findJdk(javaHome?: string) : Promise { * search logic and uses that javaHome as is, not looking anywhere else. */ function findJavaExe(javaHome?: string) : string | null { + //Try java home first if (!javaHome) { javaHome = process.env["JAVA_HOME"]; } @@ -112,14 +113,17 @@ function findJavaExe(javaHome?: string) : string | null { } let binName = correctBinname("java"); if (javaHome) { - return Path.resolve(javaHome, "bin", binName); - } else { - for (var searchPath of process.env['PATH'].split(Path.delimiter)) { - let javaExe = Path.resolve(searchPath, binName); - if (FS.existsSync(javaExe)) { - //Resolve symlinks - return FS.realpathSync(javaExe); - } + let javaExe = Path.resolve(javaHome, "bin", binName); + if (FS.existsSync(javaExe)) { + return javaExe; + } + } + + for (var searchPath of process.env['PATH'].split(Path.delimiter)) { + let javaExe = Path.resolve(searchPath, binName); + if (FS.existsSync(javaExe)) { + //Resolve symlinks + return FS.realpathSync(javaExe); } } return null; diff --git a/vscode-extensions/commons-vscode/src/launch-util.ts b/vscode-extensions/commons-vscode/src/launch-util.ts index 93c03c16f..c0cfdfb0a 100644 --- a/vscode-extensions/commons-vscode/src/launch-util.ts +++ b/vscode-extensions/commons-vscode/src/launch-util.ts @@ -76,7 +76,12 @@ export function activate(options: ActivatorOptions, context: VSCode.ExtensionCon let findJRE = options.preferJdk ? findJdk : findJvm; - return findJRE().then(jvm => { + return findJRE() + .catch(error => { + VSCode.window.showErrorMessage("Error trying to find JVM: "+error); + return Promise.reject(error); + }) + .then(jvm => { if (!jvm) { VSCode.window.showErrorMessage("Couldn't locate java in $JAVA_HOME or $PATH"); return;