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:
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:
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
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