Skip to content

Commit 10bb60f

Browse files
committed
Reset the java directory when javadir is wrong.
1 parent 9fc1470 commit 10bb60f

File tree

27 files changed

+303
-260
lines changed

27 files changed

+303
-260
lines changed

HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Launcher.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import java.net.URL;
2323
import java.net.URLClassLoader;
2424
import java.util.ArrayList;
25-
import java.util.Arrays;
26-
import java.util.List;
2725
import javax.swing.SwingUtilities;
2826
import org.jackhuang.hellominecraft.C;
2927
import org.jackhuang.hellominecraft.HMCLog;
@@ -91,6 +89,9 @@ public static void main(String[] args) {
9189
SwingUtilities.invokeLater(() -> LogWindow.instance.setVisible(true));
9290
}
9391

92+
if (!JdkVersion.isJava64Bit() && Platform.getPlatform() == Platform.BIT_64)
93+
MessageBox.Show(C.i18n("advice.os64butjdk32"));
94+
9495
URL[] urls = new URL[len];
9596

9697
try {
@@ -103,12 +104,9 @@ public static void main(String[] args) {
103104
return;
104105
}
105106

106-
if (!JdkVersion.isJava64Bit() && Platform.getPlatform() == Platform.BIT_64)
107-
MessageBox.Show(C.i18n("advice.os64butjdk32"));
108-
109107
Method minecraftMain;
110108
try {
111-
minecraftMain = new URLClassLoader(urls).loadClass(mainClass).getMethod("main", String[].class);
109+
minecraftMain = new URLClassLoader(urls, URLClassLoader.getSystemClassLoader().getParent()).loadClass(mainClass).getMethod("main", String[].class);
112110
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException t) {
113111
MessageBox.Show(C.i18n("crash.main_class_not_found"));
114112
println("Minecraft main class not found.");

HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java

Lines changed: 74 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,22 @@
2626
import java.net.PasswordAuthentication;
2727
import java.net.URI;
2828
import java.net.URISyntaxException;
29+
import java.net.URL;
30+
import java.net.URLClassLoader;
2931
import java.security.GeneralSecurityException;
3032
import java.security.cert.X509Certificate;
3133
import java.text.ParseException;
3234
import java.util.Map;
35+
import java.util.jar.JarFile;
3336
import javax.net.ssl.HostnameVerifier;
3437
import javax.net.ssl.HttpsURLConnection;
3538
import javax.net.ssl.SSLContext;
3639
import javax.net.ssl.X509TrustManager;
3740
import javax.swing.ImageIcon;
41+
import javax.swing.SwingUtilities;
3842
import javax.swing.UIManager;
3943
import javax.swing.UnsupportedLookAndFeelException;
4044
import org.jackhuang.hellominecraft.C;
41-
import org.jackhuang.hellominecraft.utils.functions.NonConsumer;
4245
import org.jackhuang.hellominecraft.HMCLog;
4346
import org.jackhuang.hellominecraft.launcher.launch.GameLauncher;
4447
import org.jackhuang.hellominecraft.launcher.utils.CrashReporter;
@@ -47,18 +50,24 @@
4750
import org.jackhuang.hellominecraft.logging.layout.DefaultLayout;
4851
import org.jackhuang.hellominecraft.views.LogWindow;
4952
import org.jackhuang.hellominecraft.launcher.settings.Settings;
53+
import org.jackhuang.hellominecraft.launcher.utils.upgrade.Upgrader;
5054
import org.jackhuang.hellominecraft.launcher.views.MainFrame;
5155
import org.jackhuang.hellominecraft.lookandfeel.HelloMinecraftLookAndFeel;
56+
import org.jackhuang.hellominecraft.tasks.TaskWindow;
57+
import org.jackhuang.hellominecraft.utils.ArrayUtils;
5258
import org.jackhuang.hellominecraft.utils.system.MessageBox;
5359
import org.jackhuang.hellominecraft.utils.StrUtils;
60+
import org.jackhuang.hellominecraft.utils.VersionNumber;
61+
import org.jackhuang.hellominecraft.utils.system.FileUtils;
62+
import org.jackhuang.hellominecraft.utils.system.IOUtils;
5463
import org.jackhuang.hellominecraft.utils.system.OS;
5564

5665
/**
5766
*
5867
* @author huangyuhui
5968
*/
60-
public final class Main implements NonConsumer {
61-
69+
public final class Main implements Runnable {
70+
6271
private static final X509TrustManager xtm = new X509TrustManager() {
6372
@Override
6473
public void checkClientTrusted(X509Certificate[] chain, String authType) {
@@ -91,7 +100,7 @@ public X509Certificate[] getAcceptedIssuers() {
91100
}
92101

93102
public static String launcherName = "Hello Minecraft! Launcher";
94-
public static byte firstVer = 2, secondVer = 3, thirdVer = 4, forthVer = 12;
103+
public static byte firstVer = 2, secondVer = 3, thirdVer = 4, forthVer = 13;
95104
public static int minimumLauncherVersion = 16;
96105

97106
/**
@@ -116,6 +125,31 @@ public static String makeTitle() {
116125

117126
public static void main(String[] args) {
118127
{
128+
if (!ArrayUtils.contains(args, "nofound"))
129+
try {
130+
File f = Upgrader.HMCL_VER_FILE;
131+
if (f.exists()) {
132+
Map<String, String> m = C.gson.fromJson(FileUtils.readFileToString(f), Map.class);
133+
String s = m.get("ver");
134+
if (s != null && VersionNumber.check(s).compareTo(new VersionNumber(firstVer, secondVer, thirdVer)) > 0) {
135+
String j = m.get("loc");
136+
if (j != null) {
137+
File jar = new File(j);
138+
if (jar.exists()) {
139+
JarFile jarFile = new JarFile(jar);
140+
String mainClass = jarFile.getManifest().getMainAttributes().getValue("Main-Class");
141+
if (mainClass != null) {
142+
new URLClassLoader(new URL[]{jar.toURI().toURL()}, URLClassLoader.getSystemClassLoader().getParent()).loadClass(mainClass).getMethod("main", String[].class).invoke(null, new Object[]{new String[]{"nofound"}});
143+
return;
144+
}
145+
}
146+
}
147+
}
148+
}
149+
} catch (Throwable t) {
150+
t.printStackTrace();
151+
}
152+
119153
Thread.setDefaultUncaughtExceptionHandler(new CrashReporter(true));
120154

121155
try {
@@ -152,43 +186,54 @@ protected PasswordAuthentication getPasswordAuthentication() {
152186
}
153187
});
154188
}
155-
189+
156190
MainFrame.showMainFrame(Settings.isFirstLoad());
157191
}
158192
}
159193

160194
@Override
161-
public void onDone() {
195+
public void run() {
162196
GameLauncher.PROCESS_MANAGER.stopAllProcesses();
163197
}
164198

165199
public static void update() {
166-
if (MessageBox.Show(C.i18n("update.newest_version") + Settings.UPDATE_CHECKER.getNewVersion().firstVer + "." + Settings.UPDATE_CHECKER.getNewVersion().secondVer + "." + Settings.UPDATE_CHECKER.getNewVersion().thirdVer + "\n"
167-
+ C.i18n("update.should_open_link"),
168-
MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) {
169-
Map<String, String> map = Settings.UPDATE_CHECKER.download_link;
170-
String url = C.URL_PUBLISH;
171-
if (map != null)
172-
if (map.containsKey(OS.os().checked_name))
173-
url = map.get(OS.os().checked_name);
174-
else if (map.containsKey(OS.UNKOWN.checked_name))
175-
url = map.get(OS.UNKOWN.checked_name);
176-
if (url == null) url = C.URL_PUBLISH;
177-
try {
178-
java.awt.Desktop.getDesktop().browse(new URI(url));
179-
} catch (URISyntaxException | IOException e) {
180-
HMCLog.warn("Failed to browse uri: " + url, e);
181-
182-
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
183-
cb.setContents(new StringSelection(url), null);
184-
MessageBox.Show(C.i18n("update.no_browser"));
185-
}
186-
} else
187-
Settings.getInstance().setCheckUpdate(false);
200+
Settings.UPDATE_CHECKER.requestDownloadLink(() -> {
201+
SwingUtilities.invokeLater(() -> {
202+
Map<String, String> map = Settings.UPDATE_CHECKER.download_link;
203+
if (map != null && map.containsKey("pack"))
204+
try {
205+
if (TaskWindow.getInstance().addTask(new Upgrader(map.get("pack"), Settings.UPDATE_CHECKER.versionString)).start()) {
206+
new ProcessBuilder(new String[]{IOUtils.getJavaDir(), "-jar", Upgrader.getSelf(Settings.UPDATE_CHECKER.versionString).getAbsolutePath()}).directory(new File(".")).start();
207+
System.exit(0);
208+
}
209+
} catch (IOException ex) {
210+
HMCLog.warn("Failed to create upgrader", ex);
211+
}
212+
if (MessageBox.Show(C.i18n("update.newest_version") + Settings.UPDATE_CHECKER.getNewVersion().firstVer + "." + Settings.UPDATE_CHECKER.getNewVersion().secondVer + "." + Settings.UPDATE_CHECKER.getNewVersion().thirdVer + "\n"
213+
+ C.i18n("update.should_open_link"),
214+
MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) {
215+
String url = C.URL_PUBLISH;
216+
if (map != null)
217+
if (map.containsKey(OS.os().checked_name))
218+
url = map.get(OS.os().checked_name);
219+
else if (map.containsKey(OS.UNKOWN.checked_name))
220+
url = map.get(OS.UNKOWN.checked_name);
221+
if (url == null) url = C.URL_PUBLISH;
222+
try {
223+
java.awt.Desktop.getDesktop().browse(new URI(url));
224+
} catch (URISyntaxException | IOException e) {
225+
HMCLog.warn("Failed to browse uri: " + url, e);
226+
227+
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
228+
cb.setContents(new StringSelection(url), null);
229+
MessageBox.Show(C.i18n("update.no_browser"));
230+
}
231+
}
232+
});
233+
});
188234
}
189235

190236
public static void invokeUpdate() {
191-
if (Settings.getInstance().isCheckUpdate()) update();
192237
MainFrame.instance.invokeUpdate();
193238
}
194239

HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/AbstractMinecraftLoader.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ public void makeHeadCommand(List<String> res) {
5858
HMCLog.log("On making head command.");
5959

6060
String str = v.getJavaDir();
61+
if(!v.getJavaDirFile().exists()) {
62+
MessageBox.Show(C.i18n("launch.wrong_javadir"));
63+
v.setJava(null);
64+
str = v.getJavaDir();
65+
}
6166
JdkVersion jv = new JdkVersion(str);
6267
if (Settings.getInstance().getJava().contains(jv))
6368
jv = Settings.getInstance().getJava().get(Settings.getInstance().getJava().indexOf(jv));

HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/GameLauncher.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ public void launch(List str) {
133133
HMCLog.warn("Failed to invoke precalled command", ex);
134134
}
135135
}
136+
HMCLog.log("Starting process");
136137
ProcessBuilder builder = new ProcessBuilder(str);
137138
builder.directory(provider.getRunDirectory(get.getSelectedMinecraftVersion().id))
138139
.environment().put("APPDATA", get.getCanonicalGameDirFile().getPath());

HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/launch/LaunchFinisher.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ else if (obj.getProfile().getLauncherVisibility() == LauncherVisibility.KEEP)
4949
System.exit(0);
5050
return true;
5151
});
52+
jpm.start();
5253
return true;
5354
});
5455
obj.launch(str);

0 commit comments

Comments
 (0)