Problem mit ClassLoader und LWJGL

TimoH.

Mitglied
Hallo Leute,

ich arbeite gerade an einem kleinen Projekt (einen custom Launcher für Minecraft, aber das ist hier denke ich nicht wichtig) und stoße auf ein nerviges Problem.

Und zwar lade ich die "Main"-Klasse von Minecraft und auch die main methode, das scheint gut zu funktionieren (jedenfalls die Klasse zu laden) mit folgendem Code:

Java:
//...
        try {
            URL jarUrl;
            jarUrl = new File("minecraft.jar").toURI().toURL();
            ClassLoader cl = Thread.currentThread().getContextClassLoader();
            if (cl != null && (cl instanceof URLClassLoader)) {
                URLClassLoader urlClassLoader = (URLClassLoader) cl;
                Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
                addURL.setAccessible(true);
                    addURL.invoke(urlClassLoader, new Object[]{jarUrl});
            }
            setLibraryPaths();
            String [] params = {user,session};
            Class clazz = cl.loadClass("net.minecraft.client.Minecraft");
            Method m = clazz.getMethod("main",new Class[]{params.getClass()});
            m.invoke(null, new Object[] {params});
        } catch (Exception ex) {
            ex.printStackTrace();
        }
//...

    private static void setLibraryPaths(){
        String path =  System.getProperty("user.dir") + File.separator;
        unloadNatives(path);
        System.setProperty("org.lwjgl.librarypath",path + "natives");
        System.setProperty("net.java.games.input.librarypath",path + "natives");
    }

    private static void unloadNatives(String nativePath) {

        try {
            Field field = ClassLoader.class.getDeclaredField("loadedLibraryNames");
            field.setAccessible(true);
            Vector libs = (Vector) field.get(Test.class.getClass().getClassLoader());
            String path = new File(nativePath).getCanonicalPath();

            for (int i = 0; i < libs.size(); i++) {
                String s = (String) libs.get(i);

                if (s.startsWith(path)) {
                    libs.remove(i);
                    i--;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Das Problem tritt dann auf, wenn ich mein Programm starte und dann Minecraft trotz des setzens der Pfade diese Bibliotheken nicht kennt. Ich bekomme folgenden Fehler:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/LWJGLException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at test.Test.startMinecraft(Test.java:60)
        at test.Test.doLogin(Test.java:116)
        at test.Test.main(Test.java:43)
Caused by: java.lang.ClassNotFoundException: org.lwjgl.LWJGLException
        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)
        ... 7 more

Ich sitze da jetzt schon nen bischen dran und weiß nicht mehr weiter. Ich würde mich über jeden Hinweis freuen.

lg Timo

P.S.: Ja ich weiß dass das hier keine Minecraft-Forum ist, aber das ist ja auch nicht umbedingt Minecraft beschränkt, denke ich :)
 
I

irgendjemand2

Gast
also weder komme ich drauf warum ein cast von [c]getClassLoader()[/c] nach [c]Vector[/c] irgendwie funktionieren sollte ... oder geschweige denn ohne fehler compilebar sein würde *zumindest nicht ohne warnungen* ... aber was du da machst sieht sehr wirr aus ...


um dir mal auf die sprünge zu helfen : du musst auch alle anderen JAR-files die von MC gebraucht werden in den CP mit aufnehmen ...

wobei ich *wie ich bereits an anderer stelle schon mal sagte* die manipulation des System-CL nicht gerade "sauber" finde ... aber ok ... wirst dir da schon was bei gedacht haben ...



btw : ich denke das sowas dann wohl doch eher in ein MC-forum gehört anstatt hier her ... da das problem und der sinn des ganze wohl zu sehr in diese richtung gehen dürfte anstatt ein simples : ClassNotFound was aus nicht includierten libs hervorgeht*
 
S

Spacerat

Gast
@TO: Also das Vorhandensein einer benötigten Lib kann man zur Laufzeit eleganter feststellen. Dazu genügt in der Regel ein [c]Classloader.classForName(String classname);[/c] und anschliessend eine entsprechende Fehlermeldung, wenn diese nicht gefunden wurde. Dazu muss man nicht krampfhaft versuchen, diese Lib über per Reflection "verzauberte" Pfade zu laden. "XXX is not installed properly" und gut. ;)

Irgendjemand ist da wohl meiner Meinung.
[ot]Aber irgendjemand müsste da vllt. noch bezüglich des Casts aufgeklärt werden (;)). Das Field "loadedLibraryNames" der Klasse ClassLoader ist statisch, deswegen ist das Objekt, welches darauf zugreifen will zunächst erstmal egal und darf sogar "null" sein. Wichtig wird das Objekt erst, wenn das Feld normalerweise von diesem nicht erreicht werden kann, dazu gibt es "setAccessible(true)". Eine Warnung gibt es allerdings wegen der fehlenden Parametrisierung.[/ot]
 
Zuletzt bearbeitet von einem Moderator:
I

irgendjemand2

Gast
gut .. mit casts kenn ich mich aus ... ich hab nur überesen das dieses Field scheinbar ein Vector *oder irgendwas anderes von List<?>* ist und desshalb natürlich der cast funktioniert ...
habe halt nur das getClassLoader() gelesen und vorne das Vector ... und dachte mir halt : das kann nich stimmen ..

aber wie gesagt : um eben genau solche "lese"-fehler bei fremden code zu vermeiden sollte man sowas eben nur im äußersten notfall einsetzen *wesshalb ich auch in dem anderen thread bei dem sowas aufgetaucht ist mit recht protestiert habe ... wie man hier ja nun sehen kann : ich hab den code schlicht falsch verstanden* ...

was allerdings mit dem code da nun genau bezweckt werden soll ist mir immer noch nicht klar ...
davon abgesehen das es eigentlich in ein MC-forum gehört *ala : eigenen launcher schreiben* und nicht in dieses forum hier *wo meines wissens nach keine hilfe zu reverse engeneering gegeben wird *und auf nichts anderes wird das hier wohl hinaus laufen** ...

@TO
das was du versuchst kannst du auch mit einfachen URLClassLoadern machen ... dazu musst du den System-CL nicht dazu casten ...


[ot]wie gesagt : ich versteh immer noch nich was das werden soll ... höchstens ein eigener launcher um eine registration und damit die bezahlung zu umgehen ... wobei es das gibt ... google : minecraft alpha launcher[/ot]
 

TimoH.

Mitglied
Danke für die Hilfe, aber um einiges Klarzustellen:

- Es gibt meines wissens hier kein Reverse Engineering meinerseits (danach ist hier auch eindeutig nicht gefragt)
- Es soll kein Programm zum umgehen der Authentifizierung sein, diese ist bereits implementiert und
wird vor diesem Schritt ausgeführt.

Mein Problem scheint eher allgemeinerer Natur zu sein:
Und zwar, dass ich für eine geladene Klasse aus einer externen .jar file Bibliothekenpfade setzen will, dies jedoch anscheinend falsch tue. Ich werde es weiter probieren.

lg Timo

Edit: Ok, habe das Problem gelöst. Ich musste nicht nur die minecraft.jar mit dem ClassLoader laden, sondern natürlich auch die lwjgl sachen :)
 
Zuletzt bearbeitet:
I

irgendjemand2

Gast
wie bereits gesagt : du musst auch ALLE abhängigkeiten laden ...

und ob du dies nun über angabe von start-parametern machst ... und da i-was mit reflections rumbastelst ist eigentlich ziemlich bums ... wobei die start-parameter deutlich einfacher sind ...

MC selbst nutz Launch4J mit entsprecheden settings ... darum musst du da auch nichts angeben ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
ruerob Problem bei Fade-Out von Sounds Spiele- und Multimedia-Programmierung 3
L [Slick2D] Problem bei Speicherfreigabe Spiele- und Multimedia-Programmierung 2
M Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 22
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
J Problem bei pixelgenauer Kollisionsabfrage Spiele- und Multimedia-Programmierung 10
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
R StringIndexOutOfBoundsException - Problem Spiele- und Multimedia-Programmierung 2
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
A TileMap KeyListener - Problem Spiele- und Multimedia-Programmierung 2
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
N Problem mit Kollisionsabfrage beim Fallen Jump & Run Spiele- und Multimedia-Programmierung 5
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Fu3L Problem mit 3D Noise Spiele- und Multimedia-Programmierung 4
L Problem beim Rätsellöser Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
M Scrolling Repaint Problem Spiele- und Multimedia-Programmierung 2
Samake03 [Problem] layeredPane bzw. Viewport Spiele- und Multimedia-Programmierung 3
Helgon glTexParameter / glTexImage2D Problem Spiele- und Multimedia-Programmierung 11
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
M Problem mit Gameserver / Datensynchronisation Spiele- und Multimedia-Programmierung 10
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
X Geometry Wars Clone Problem Spiele- und Multimedia-Programmierung 4
H Problem mit JMonkeyEngine3 und OgreXML Spiele- und Multimedia-Programmierung 3
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
T Problem mit Speicherverbrauch Spiele- und Multimedia-Programmierung 5
S Programmstruktur Problem! Spiele- und Multimedia-Programmierung 8
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
C MP3 Handler-Problem Spiele- und Multimedia-Programmierung 13
C [gelöst] MP3-Codec-Problem Spiele- und Multimedia-Programmierung 2
K Schiebepuzzle Array Zufallszahlen Problem Spiele- und Multimedia-Programmierung 8
J Java 3D Problem Spiele- und Multimedia-Programmierung 2
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
H Repaint-Problem mit Quaxlis Tutorial Spiele- und Multimedia-Programmierung 2
C Java Sound API Clip.Close() Problem Spiele- und Multimedia-Programmierung 1
K Problem beim Anzeigen von Bildern Spiele- und Multimedia-Programmierung 5
D Problem mit Überprüfung beim Lottospiel Spiele- und Multimedia-Programmierung 6
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
A KeyListener - Thread Problem Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben