Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich suche Informationen darüber, wie *genau* eine runnable JAR intern aufgebaut ist, und worauf es bei der Erstellung ankommt.
In den einschlägigen Büchern gibt es dazu kaum Informationen. Ich muss wissen wie Java-Programme auf andere Systeme verteilt und ausgeführt werden können, ohne das der Anwender die Konsole anfassen muss um das Programm zu starten.
Ein runnable JAR hat ein META-INF Verzeichnis mit einem Manifest, und da steht dann *genau* drin, wo die Bibliotheken liegen und welches die zu startende Klasse ist. Kann man ganz *genau* hier nachlesen: http://java.sun.com/docs/books/tutorial/deployment/jar/
Leider reichen die Infos noch nicht. Kriege es einfach nicht hin eine runnable JAR zu erstellen, welche die Grafiken findet. Meine Projektstruktur ist total simpel.
Es gibt einen bin und einen src Verzeichnisse in Eclipse. In src habe ich pics und sounds (Verzeichnisse). Wenn ich die Verzeichnisse in src packe, geht es nicht. Wenn ich sie in bin packe, geht es. Die Mehrheit der Java-Coder erzählt mir, das sie in src gehören. Dann funzt aber die runnable JAR nicht.
Wenn ich die JAR entpacke und dann mit der Konsole "java MainMethodenKlasse" das Programm starte, geht alles einwandfrei.
Wenn ich in der Konsole aber die MainMethodenKlasse direkt aus der JAR heraus starte, kriege ich eine Fehlermeldung:
Code:
C:\Dokumente und Einstellungen\Ich\Desktop>java -cp SpeesInVeeders.jar GamePan
el
\pics\rocket.gif
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at GamePanel.loadPics(GamePanel.java:175)
at GamePanel.doInitializations(GamePanel.java:74)
at GamePanel.<init>(GamePanel.java:67)
at GamePanel.main(GamePanel.java:53)
Die Fehlermeldung besagt, das der Pfad "\pics\rocket.gif" ins nichts geführt hat, die Datei also nicht gefunden wird!
Das wird wohl ungefähr das gleiche sein, wie wenn ich die JAR per doppelklick auf dem Desktop starte. Dann passiert genau das. Nur wenn ich sie entpacke und direkt die GamePanel Klasse anschmeiße, läuft es.
Oder ich packe die Dateien da hin, wo sie nicht hin gehören, und dann geht es. Aber das kann's ja nicht wirklich sein
[Edit: eigentlich wollte ich dieses P.P.S. ja am Schluss, aber da ich damit dieselbe Exception exakt reproduzieren kann...]
P.P.S. ClassLoader benötigt Pfade die mit "/" getrennt sind, nicht mit "\". Ich kann dieselbe Exception mit einem Pfad der fälschlicherweise \ verwendet erzeugen. :bae:
Vielleicht solltest du dein Programm zusammenpacken (bitte zuerst dafür sorgen, dass man sich nicht durch 10000 Klassen wühlen muss) und hier posten. Oben rechts hat es einen Link "Eigene Dateien", da kannst es direkt auf diesen Server werfen.
Ich weiss ja nicht was du sonst noch machst, aber bei mir funktionieren solche Programme problemlos: zum Beispiel dieses hier.
P.S. jar-Dateien solltest du eigentlich mit "java -jar Datei.jar" starten können, den CLASSPATH musst du nicht anrühren.
Nach dem ich die File.separator Konstanten raus geschmissen habe, lief es :autsch: ???:L :lol:
Danke für den Tipp!
Seltsamer weise war ich zu File.separator veranlasst, als mein Programm auf einem Mac nicht anlaufen wollte. Jetzt schnalle ich das mit den URL's. In welchen Fällen ist denn dann ein File.separator nützlich? Wohl dann, wenn man kein URL Objekt benutzt. Auch geschnallt.
Seltsamer weise war ich zu File.separator veranlasst, als mein Programm auf einem Mac nicht anlaufen wollte. Jetzt schnalle ich das mit den URL's. In welchen Fällen ist denn dann ein File.separator nützlich? Wohl dann, wenn man kein URL Objekt benutzt. Auch geschnallt.