From fb7542050306d4b2108a4bfbfe2bd37659863594 Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Fri, 26 May 2023 18:09:09 +0700 Subject: [PATCH] Fix: random ClassNotFoundException LWJGL classes Cleanup: remove unused code --- .../net/kdt/pojavlaunch/PojavClassLoader.java | 2 +- .../main/java/net/kdt/pojavlaunch/Tools.java | 48 ++----------------- 2 files changed, 6 insertions(+), 44 deletions(-) diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/PojavClassLoader.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/PojavClassLoader.java index c39679ab..4788b844 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/PojavClassLoader.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/PojavClassLoader.java @@ -44,7 +44,7 @@ public class PojavClassLoader extends URLClassLoader { * * @see java.lang.instrument.Instrumentation#appendToSystemClassPathSearch */ - private void appendToClassPathForInstrumentation(String path) { + protected void appendToClassPathForInstrumentation(String path) { assert(Thread.holdsLock(this)); // addURL is a no-op if path already contains the URL diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java index 47ed23d0..6ee9cb3f 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -95,39 +95,13 @@ public final class Tools final String launchClassPath = generateLaunchClassPath(versionInfo); - List javaArgList = new ArrayList(); - //javaArgList.add(versionInfo.logging.client.argument.replace("${path}", DIR_GAME_NEW.getAbsolutePath() + "/" + mVersion.logging.client.file.id)); - javaArgList.add("-cp"); - javaArgList.add(launchClassPath); - - javaArgList.add(versionInfo.mainClass); - javaArgList.addAll(Arrays.asList(launchArgs)); - // Debug -/* - BufferedWriter bw = new BufferedWriter(new FileWriter(new File(Tools.DIR_GAME_HOME, "currargs_generated.txt"))); - for (String s : javaArgList) { - bw.write(s, 0, s.length()); - bw.write(" ", 0, 1); - } - bw.close(); -*/ - -/* - final List urlList = new ArrayList<>(); - for (String s : launchClassPath.split(":")) { - if (!s.isEmpty()) { - urlList.add(new File(s).toURI().toURL()); - } - } -*/ - System.out.println("Args init finished. Now starting game"); - // URLClassLoader loader = new URLClassLoader(urlList.toArray(new URL[0]), ClassLoader.getSystemClassLoader()); - PojavClassLoader loader = (PojavClassLoader) ClassLoader.getSystemClassLoader(); // add launcher.jar itself - loader.addURL(Tools.class.getProtectionDomain().getCodeSource().getLocation().toURI().toURL()); + for (String s : System.getProperty("java.class.path").split(":")) { + loader.appendToClassPathForInstrumentation(s); + } for (String s : launchClassPath.split(":")) { if (!s.isEmpty()) { loader.addURL(new File(s).toURI().toURL()); @@ -137,12 +111,6 @@ public final class Tools Class clazz = loader.loadClass(versionInfo.mainClass); Method method = clazz.getMethod("main", String[].class); method.invoke(null, new Object[]{launchArgs}); - - // throw new RuntimeException("Game exited. Check latestlog.txt for more details."); - - //}).start(); - - // JREUtils.launchJavaVM(javaArgList); } public static String[] getMinecraftArgs(MinecraftAccount profile, JMinecraftVersionList.Version versionInfo) { @@ -250,7 +218,6 @@ public final class Tools return libStr.toString(); } */ - private static boolean isClientFirst = false; public static String generateLaunchClassPath(JMinecraftVersionList.Version info) { StringBuilder libStr = new StringBuilder(); //versnDir + "/" + version + "/" + version + ".jar:"; @@ -276,19 +243,14 @@ public final class Tools } */ - if (isClientFirst) { - libStr.append(DIR_HOME_VERSION + "/" + info.id + "/" + info.id + ".jar"); - } for (String perJar : classpath) { if (!new File(perJar).exists()) { System.out.println("Ignored non-exists file: " + perJar); continue; } - libStr.append((isClientFirst ? ":" : "") + perJar + (!isClientFirst ? ":" : "")); - } - if (!isClientFirst) { - libStr.append(DIR_HOME_VERSION + "/" + info.id + "/" + info.id + ".jar"); + libStr.append(perJar + ":"); } + libStr.append(DIR_HOME_VERSION + "/" + info.id + "/" + info.id + ".jar"); return libStr.toString(); }