From bc2405cf12e4930e5b2a13705ec52738da580333 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sun, 23 Feb 2025 10:47:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=20macOS=20=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=97=A0=E6=B3=95=E6=89=BE=E5=88=B0=E9=80=9A=E8=BF=87?= =?UTF-8?q?=20DMG=20=E5=AE=89=E8=A3=85=E7=9A=84=20Java=20=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#3645)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jackhuang/hmcl/java/JavaManager.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java index a5592e6a9..ec00801e9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java @@ -376,8 +376,8 @@ public final class JavaManager { searchAllJavaInDirectory(javaRuntimes, Paths.get(System.getProperty("user.home"), "/.sdkman/candidates/java")); // SDKMAN! break; case OSX: - tryAddJavaHome(javaRuntimes, Paths.get("/Library/Java/JavaVirtualMachines/Contents/Home")); - tryAddJavaHome(javaRuntimes, Paths.get(System.getProperty("user.home"), "/Library/Java/JavaVirtualMachines/Contents/Home")); + searchJavaInMacJavaVirtualMachines(javaRuntimes, Paths.get("/Library/Java/JavaVirtualMachines")); + searchJavaInMacJavaVirtualMachines(javaRuntimes, Paths.get(System.getProperty("user.home"), "/Library/Java/JavaVirtualMachines")); tryAddJavaExecutable(javaRuntimes, Paths.get("/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java")); tryAddJavaExecutable(javaRuntimes, Paths.get("/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/bin/java")); // Homebrew @@ -631,6 +631,20 @@ public final class JavaManager { } } + private static void searchJavaInMacJavaVirtualMachines(Map javaRuntimes, Path directory) { + if (!Files.isDirectory(directory)) { + return; + } + + try (DirectoryStream stream = Files.newDirectoryStream(directory)) { + for (Path subDir : stream) { + tryAddJavaHome(javaRuntimes, subDir.resolve("Contents/Home")); + } + } catch (IOException e) { + LOG.warning("Failed to find Java in " + directory, e); + } + } + // ==== Windows Registry Support ==== private static void queryJavaInRegistryKey(Map javaRuntimes, String location) { for (String java : querySubFolders(location)) {