RikuXan Geschrieben 30. Juli 2010 Geschrieben 30. Juli 2010 Hi liebe Fachinformatiker-Community. Ich bin zur Zeit damit beschäftigt aus einem Java-Projekt eine Executable zu erstellen. Allerdings stoße ich dabei auf große Probleme. Das Projekt war ein Schulprojekt, wurde von uns vorgestellt und jetzt sollen wir das Projekt noch "startbar" abliefern. Das Problem dabei ist, wir haben anstatt der Standard-Schul-IDE Netbeans verwendet aus diversen Gründen und nun ist natürlich niemand fähig das Projekt in Netbeans zu begutachten, wäre ja viel zu kompliziert. Folglich -> Jar-File / EXE o.Ä. . Im Detail: Das Projekt basiert auf der LWJGL-Library, also OpenGL.Projekt liegt in D:\Snake, darin der src, dist, build-Ordner etc.LWJGL liegt in D:\LWJGLIn Netbeans ist bei Projekt -> Eigenschaften -> Ausführen eingetragen: -Djava.library.path=C:\LWJGL/native/windowsmain-Funktion liegt in Graphics.Main, Manifest in D:\Snake mit Main-Class: Graphics.Main Wie müsste jetzt die Aufrufsequenz für das Projekt sein? Mein jetziger Ansatz: java -jar -cp %CLASSPATH%;D:\LWJGL\jar\lwjgl.jar;D:\LWJGL\jar\lwjgl_util.jar;D:\Snake -Djava.library.path=D:\LWJGL\native\windows D:\Snake\dist\SnakeOnline.jar -jar da ich ein jar-File starten will -cp der Classpath aus den Umgebungsvariablen + Zwei von LWJGL benötigte Libraries als jar( Wie in Netbeans ) + der Projektordner -Djava... das ist in Netbeans bei Ausführen drin Und am Schluss der Pfad zum Jar-File Was fehlt jetzt hier noch? Der Fehler den ich bekomme: java.lang.NoClassDefFoundError in org/lwjgl/opengl/display Könnte mir bitte jemand sagen was ich falsch mache, was noch fehlt und wie ich es zum Laufen bringe? Ihr wärt echt meine Helden, wenn ihr das hinbringt. Wenn ihr mehr Informationen braucht, sagt es einfach. MfG RikuXan Zitieren
Schiller256 Geschrieben 30. Juli 2010 Geschrieben 30. Juli 2010 In welcher jar Datei liegt denn die Klasse die nicht gefunden wird? Diese Jar Datei musst du dann noch mit in deinen Classpath aufnehmen. Zitieren
RikuXan Geschrieben 30. Juli 2010 Autor Geschrieben 30. Juli 2010 In D:\LWJGL\jar\lwjgl.jar soweit ich weiß, dort sind die ganzen Standardklassen der Library vertreten. Die stand ja auch schon mit dabei. MfG RikuXan Zitieren
Schiller256 Geschrieben 30. Juli 2010 Geschrieben 30. Juli 2010 Kannst du deine MANIFEST.MF Datei mal zeigen. Dein Classpath scheint nicht der richtige zu sein. Was steht denn in deiner Umgebungsvaribale CLASSPATH drin? Schau dir vielleicht nochmal folgenden Link an und versuche die Testanwendung entsprechend über die Konsole zu starte. lwjgl.org - Home of the Lightweight Java Game Library Zitieren
flashpixx Geschrieben 30. Juli 2010 Geschrieben 30. Juli 2010 Erstelle eine Jar von Deinem Projekt ohne externe Libraries. Du musst beim Jar Aufruf dann eben dafür Sorge tragen, dass eben in den CLASSPATH die notwendigen externen Libs mit aufgenommen werden, den CLASSPATH kann man eben systemweit oder userbezogen passend setzen Zitieren
RikuXan Geschrieben 30. Juli 2010 Autor Geschrieben 30. Juli 2010 (bearbeitet) Ich bin leider gerade nicht zu Hause um es auszuprobieren, vielen Dank schonmal für die Antworten. Das Manifest ist das normal generierte mit einer Extrazeile Main-Class: Graphics.Main Classpath ist im Moment nur irgendetwas von QT drin. Und das Testprogramm funktioniert auch einwandfrei. MfG RikuXan Bearbeitet 30. Juli 2010 von RikuXan Zitieren
RikuXan Geschrieben 31. Juli 2010 Autor Geschrieben 31. Juli 2010 So wieder zu Hause hier die genauen Infos: Manifest.mf: Manifest-Version: 1.0 X-COMMENT: Main-Class will be added automatically by build Main-Class: Graphics.Main Build ohne Libraries: Dann bekommen ich aber von Netbeans beim builden Fehler, da er die Libraries nicht findet. Und noch etwas: Wenn ich das Jar-File in den LWJGL-Ordner kopiere und dann den Testbefehl von LWJGL eingebe, kommt das Testprogramm, wenn ich aber dann den Befehl auf mein Projekt ändere: java -cp .;res;jar\lwjgl.jar;jar\lwjgl_test.jar;jar\lwjgl_util.jar;jar\lwjgl_fmod3.jar;jar\lwjgl_devil.jar;jar\jinput.jar; -Djava.library.path=native\windows -jar SnakeOnline.jar Wieder der selbe Fehler: Die Libraries sollten aber stimmen, das Testprojekt findet sie ja auch :/ Wenn auch noch was einfällt, sagt es einfach. MfG RikuXan Zitieren
flashpixx Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 Also so sehe ich direkt keinen Fehler (jedenfalls von dem Aufruf her). Mach mal bitte folgendes: Erstelle einmal kein Jar File, sondern starte Deine Main-Klasse aus der Konsole mit den passenden CLASSPATH Angaben. So wie die Meldung es besagt findet er die Klassen des LWJGL's nicht (oder es ist ein Programmierfehler) Zitieren
RikuXan Geschrieben 31. Juli 2010 Autor Geschrieben 31. Juli 2010 Hmm, irgendwie bin ich zu blöd das Projekt so auszuführen, es liegt kompiliert in D:\test\build\classes Wenn ich es nun aus D:\test aufrufe mit: java -cp .;res;jar\lwjgl.jar;jar\lwjgl_test.jar;jar\lwjgl_util.jar;jar\lwjgl_fmod3.jar;jar\lwjgl_devil.jar;jar\jinput.jar; -Djava.library.path=native\windows build\classes\Graphics\Main Die main-Funktion befindet sich in Graphics.Main Dann bekomme ich den Fehler hier: Sorry, aber Schuljava deckt Details wie Build aus der Kommandozeile etc. leider nicht ab, hoffe ihr verzeiht mir das. MfG RikuXan Zitieren
flashpixx Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 Verwende bitte die Uploadfunktion des Forums Sorry, aber Schuljava deckt Details wie Build aus der Kommandozeile etc. leider nicht ab, hoffe ihr verzeiht mir das. Bitte das einmal nacharbeiten, dann sollte es auch kein Problem sein Dein Projekt lauffähig zu bekommen. Der Syntax ist allgemein: java <deine Klasse> Wobei Du ggf noch den Packagenamen passend ergänzen musst. Ein Package wird wie ein Verzeichnis behandelt. D.h. wenn Deine Main-Methode in der Klasse "Main" Steckt und das im Package X ist, dann musst Du überhalb des Verzeichnisses X stehen und dort dann "java x/Main" aufrufen. Zitieren
RikuXan Geschrieben 31. Juli 2010 Autor Geschrieben 31. Juli 2010 (bearbeitet) Sorry mit der Uploadfunktion, war mir bis jetzt noch nicht bewusst, vielen Dank. Damit, dass das in der Schule nicht abgedeckt wird, meine ich eigentlich eher, dass ich mich dort nicht hundertprozentig auskenne, aber wie auf dem Bild ja auch zu sehen ist rufe ich "build\classes\Graphics\Main" auf. Die Ordnerstruktur ist in etwa: D: test <- hier befinde ich michbuildclassesGraphicsMain.classDisplay.classGameLogicjarlwjgl.jar Also sollte der Aufruf doch eigentlich auch stimmen, oder? Was ich nicht genau weiß ist, ob da nicht irgendwo ein foreslash, oder punkt anstatt eines backslashes hinmuss oder ähnliches, da ich sonst eigentlich nichts logisch falsches sehe. MfG RikuXan Nebenbei: Vielen dank für deine aktive Hilfe flashpixx, find ich toll, dass es Leute gibt, die sich so für andere engagieren. Bearbeitet 31. Juli 2010 von RikuXan Zitieren
flashpixx Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 Damit, dass das in der Schule nicht abgedeckt wird, meine ich eigentlich eher, dass ich mich dort nicht hundertprozentig auskenne, aber wie auf dem Bild ja auch zu sehen ist rufe ich "build\classes\Graphics\Main" auf. Ich gehe davon aus, dass das nicht korrekt ist. Du musst über dem Verzeichnisses Deiner Packages stehen. D.h. Wenn die Klasse in der die main drin ist als Packagebezeichnung "package Graphics" hat, dann musst Du überhalb von "graphics" stehen. Außerdem empfehle ich ganz dringend den Konventionen zur Namensgebung von Packages etc folge zu tragen. Zitieren
RikuXan Geschrieben 31. Juli 2010 Autor Geschrieben 31. Juli 2010 Okay ich werd in Zukunft darauf achten, dass die Packages richtig benannt sind( du meinst so etwas wie de.snake.graphics? ) Ich bin ja in test ( D:\test ) und Main.class ist in Graphics ( D:\test\build\classes\Graphics ), bin also überhalb des Ordners. Könnte ich dir das Projekt vielleicht schicken zusammen mit den Libraries und du schaust ob es bei dir funktioniert? Natürlich nur wenn du Zeit und Lust hast. MfG RikuXan Zitieren
Schiller256 Geschrieben 31. Juli 2010 Geschrieben 31. Juli 2010 Starte deinen java Aufruf mal aus dem Pfad "D:\test\build\classes". Ansonsten lade deine Sourcen mal hier hoch. Damit man sich das mal genauer anschauen kann. Zitieren
ksg9-sebastian Geschrieben 3. August 2010 Geschrieben 3. August 2010 Du musst die java-exe sozusagen aus dem Package-Root ausrufen. Verzeichnisstruktur: D: -> Test -> build -> classes -> de -> test -> MeineKlasse Aufruf d: cd Test\build\classes java de.test.MeineKlasse de.test.MeineKlasse wird dann "umgewandelt" und der Aufruf findet in de/test/MeineKlasse statt. Trotzdem sind die Punkte wichtig. Mit "/" o.ä. funktioniert es nicht (!). Wenn -cp oder -classpath verwendet wird dann wird der Wert der Umgebungsvariable CLASSPATH nicht (!) verwendet. Bei der Verwendung von -jar wird der "User-Classpath" ebenfalls ignoriert (!). Die sinnvollste Lösung ist wohl den Classpath innerhalb der MANIFEST-Datei denes Jar-Files zu referenzieren. Struktur: 1. mein-jar-mit-main.jar 2. lib/tools1.jar 3. lib/tools2.jar Manifest wäre dann Mainclass.... Class-Path: lib/tools1.jar lib/tools2.jar "Root" ist immer der Ort an dem die Jar liegt welche aufgerufen wird. Gruß Sebastian Zitieren
RikuXan Geschrieben 4. August 2010 Autor Geschrieben 4. August 2010 So, um das ganze abzuschließen und anderen mit dem selben Problem eine kurze Zusammenfassung zu geben: Meine Probleme waren, wie sich jetzt herausgestellt hat ( durch flashpixx's Hilfe in ICQ ), dass ich versucht habe erstens als ich es mit einem JAR-File versucht habe den Classpath mit anzugeben, was wie Sebastian nochmal erklärt hat nicht funktioniert und zweitens, dass ich nicht versucht habe das kompilierte Projekt aus dem root-Directory aufzurufen, sondern von "weiter oben". Ergo: Classpath bei JAR-Files im Manifest angeben Kompiliertes Projekt aus seinem root-Directory aufrufen MfG RikuXan Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.