From 4839d18c7335a62f7611fdbd77c95e36583d5eef Mon Sep 17 00:00:00 2001 From: Bartosz Skrzypczak Date: Wed, 29 Jan 2020 22:55:07 +0100 Subject: [PATCH] Fix NullPointerException on java 8u242 in dev environment. (#6473) Java 8u242 no longer re-initializes internal sys_paths and usr_paths fields in loadLibrary when they are null, so the value can't be set to null. --- .../java/net/minecraftforge/userdev/LaunchTesting.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/userdev/java/net/minecraftforge/userdev/LaunchTesting.java b/src/userdev/java/net/minecraftforge/userdev/LaunchTesting.java index d5a8041f5..126888b56 100644 --- a/src/userdev/java/net/minecraftforge/userdev/LaunchTesting.java +++ b/src/userdev/java/net/minecraftforge/userdev/LaunchTesting.java @@ -28,6 +28,7 @@ import cpw.mods.modlauncher.Launcher; import java.io.File; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.net.Proxy; import java.util.Arrays; import java.util.Locale; @@ -122,9 +123,12 @@ public class LaunchTesting // hack the classloader now. try { - final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths"); - sysPathsField.setAccessible(true); - sysPathsField.set(null, null); + final Method initializePathMethod = ClassLoader.class.getDeclaredMethod("initializePath", String.class); + initializePathMethod.setAccessible(true); + final Object usrPathsValue = initializePathMethod.invoke(null, "java.library.path"); + final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths"); + usrPathsField.setAccessible(true); + usrPathsField.set(null, usrPathsValue); } catch(Throwable t) {} }