From 798d9330795b16b2912225f7601d8c28b7f0f9d2 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Fri, 7 Aug 2015 21:49:18 +0800 Subject: [PATCH] Fixed finding Java problem with Windows XP. --- HMCL/obfuscate_2.3.3.map | 4 +-- .../hellominecraft/utils/system/Java.java | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/HMCL/obfuscate_2.3.3.map b/HMCL/obfuscate_2.3.3.map index b584d0af1..d82f9890e 100644 --- a/HMCL/obfuscate_2.3.3.map +++ b/HMCL/obfuscate_2.3.3.map @@ -3806,8 +3806,8 @@ org.jackhuang.hellominecraft.utils.system.Java -> org.jackhuang.hellominecraft.l 51:54:boolean equals(java.lang.Object) -> equals 59:59:int hashCode() -> hashCode 64:78:java.util.List queryAllJavaHomeInWindowsByReg() -> a - 83:89:java.util.List queryRegSubFolders(java.lang.String) -> a - 93:100:java.lang.String queryRegValue(java.lang.String,java.lang.String) -> a + 83:90:java.util.List queryRegSubFolders(java.lang.String) -> a + 94:112:java.lang.String queryRegValue(java.lang.String,java.lang.String) -> a org.jackhuang.hellominecraft.utils.system.JavaProcess -> org.jackhuang.hellominecraft.launcher.ev: java.util.List commands -> a java.lang.Process process -> a diff --git a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Java.java b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Java.java index 0bbe595dd..2d39a017a 100644 --- a/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Java.java +++ b/HMCLAPI/src/main/java/org/jackhuang/hellominecraft/utils/system/Java.java @@ -83,21 +83,33 @@ public class Java { String[] cmd = new String[]{"cmd", "/c", "reg", "query", location}; List l = IOUtils.readProcessByInputStream(cmd); List ans = new ArrayList<>(); - for (String line : l) + for (String line : l) { if (line.startsWith(location) && !line.equals(location)) ans.add(line); + } return ans; } private static String queryRegValue(String location, String name) throws IOException, InterruptedException { String[] cmd = new String[]{"cmd", "/c", "reg", "query", location, "/v", name}; List l = IOUtils.readProcessByInputStream(cmd); - if (l.size() < 3) return null; - // 18 = 4 spaces + [name.length()] + 4 spaces + "REG_SZ".length()=6 characters + 4 spaces - String s = l.get(2); - if (s != null && s.startsWith(" " + name + " REG_SZ ")) - return s.substring((" " + name + " REG_SZ ").length()); - else return null; + boolean last = false; + for(String s : l) { + if(s.trim().isEmpty()) continue; + if (last == true && s.trim().startsWith(name)) { + int begins = s.indexOf(name); + if(begins > 0) { + s = s.substring(begins + name.length()); + begins = s.indexOf("REG_SZ"); + if(begins > 0) { + s = s.substring(begins + "REG_SZ".length()); + return s.trim(); + } + } + } + if(s.trim().equals(location)) last = true; + } + return null; } }