- 214
- 11
- 59
У меня есть наследник IClassTransformer, который хукает метод Minecraft.displayGuiScreen(GuiScreen). При загрузке класса GuiScreen я ловлю вот такое исключение:
Покопался в интернетах, нашел причину, которая более вероятна для этой ситуации:
Верны ли мои догадки ? И если так, то как мне обойти эту проблему ?
Если догадки не верны, то как быть тогда ?
CFI.class = Minecraft.class
CJS.class = GuiScreen.class
[/QUOTE]
CJS.class = GuiScreen.class
Java:
> ---- Minecraft Crash Report ----
[QUOTE] // You should try our sister game, Minceraft!
Time: 08.09.19 10:52
Description: Initializing game
java.lang.LinkageError: loader constraint violation: loader (instance of sun/misc/Launcher$AppClassLoader) previously initiated loading for a different type with name "cjs"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.aaa.bbb.ccc.DDD.displayGuiScreen(DDD.java:13)
at cfi.a(SourceFile)
at cfi.am(SourceFile:458)
at cfi.a(SourceFile:377)
at net.minecraft.client.main.Main.main(SourceFile:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
В моем случае GuiScreen мог быть загружен как батя какого-нибудь GuiКласса.In the scenario, when a custom classloader does not query the parent hierarchy and decided to load the class itself, there might be case wherein the class being loaded is already loaded by some classloader in parent hierarchy.
Верны ли мои догадки ? И если так, то как мне обойти эту проблему ?
Если догадки не верны, то как быть тогда ?