Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JAR-Archiv findet keine Dateien

0 views
Skip to first unread message

Markus Pitha

unread,
Apr 23, 2007, 4:12:57 PM4/23/07
to
Hallo,

zur Probe wollte ich eine kleine Animation in ein JAR-Archiv packen, um
es auf anderen Computern zu testen.
Dummerweise scheitert es ja schon am JAR-Archiv. Verzeichnisse und
verwendete Textdateien zum Einlesen der Grafiken werden einfach nicht
gefunden?

Meine Manifest-Datei:

Main-Class: PaintMain
Depends-On: ladeliste.txt ziffern/eins.png ziffern/zwei.png
ziffern/drei.png ziffern/vier.png ziffern/fuenf.png

(Enter wurde nach dieser Zeile gedrückt, also wird sie nicht ignoriert)

So packe ich alles ins Archiv:

jar cvfm Zaehler.jar MainManifest *.class ziffern ladeliste.txt

Die Ausgabe sieht vielversprechend aus:

Manifest wurde hinzugefügt.
Hinzufügen von: ImageLoader.class (ein = 3699) (aus = 1855) (komprimiert
49 %)
Hinzufügen von: ImagePlayer.class (ein = 1092) (aus = 599) (komprimiert
45 %)
Hinzufügen von: PaintGUI.class (ein = 929) (aus = 591) (komprimiert 36 %)
Hinzufügen von: PaintMain.class (ein = 608) (aus = 381) (komprimiert 37 %)
Hinzufügen von: ShowImagePanel$1.class (ein = 792) (aus = 459)
(komprimiert 42 %)
Hinzufügen von: ShowImagePanel.class (ein = 2766) (aus = 1503)
(komprimiert 45 %)
Hinzufügen von: ziffern/ (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzufügen von: ziffern/eins.png (ein = 1324) (aus = 1329) (komprimiert 0 %)
Hinzufügen von: ziffern/zwei.png (ein = 1985) (aus = 1990) (komprimiert 0 %)
Hinzufügen von: ziffern/drei.png (ein = 1710) (aus = 1715) (komprimiert 0 %)
Hinzufügen von: ziffern/vier.png (ein = 1224) (aus = 1229) (komprimiert 0 %)
Hinzufügen von: ziffern/fuenf.png (ein = 1901) (aus = 1906) (komprimiert
0 %)
Hinzufügen von: ladeliste.txt (ein = 66) (aus = 54) (komprimiert 18 %)

Trotzdem bekomme ich beim Starten des Archivs folgendes:

$ java -jar Zaehler.jar
java.io.FileNotFoundException: ladeliste.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at java.io.FileReader.<init>(FileReader.java:41)
at ImageLoader.loadImageArray(ImageLoader.java:46)
at ShowImagePanel.<init>(ShowImagePanel.java:40)
at PaintGUI.drawGUI(PaintGUI.java:15)
at PaintMain.main(PaintMain.java:11)
Exception in thread "main" java.lang.NullPointerException
at ImagePlayer.<init>(ImagePlayer.java:16)
at ShowImagePanel.<init>(ShowImagePanel.java:41)
at PaintGUI.drawGUI(PaintGUI.java:15)
at PaintMain.main(PaintMain.java:11)


In Eclipse funktioniert es natürlich. Es liegt also definitiv an keinem
falschen Pfad. Was ist hier los?


Markus

Bernd Eckenfels

unread,
Apr 23, 2007, 4:17:53 PM4/23/07
to
Markus Pitha <newsgrou...@pithax.net> wrote:
> Main-Class: PaintMain

1. benutz ein package, nicht das default package

> at java.io.FileReader.<init>(FileReader.java:41)
> at ImageLoader.loadImageArray(ImageLoader.java:46)

Du kannst resourcen aus dem JAR nicht mit einem File Reader lesen, sondern
musst ueber den Classloader, z.b. getReseouceAsStream("/bla/fasel") machen.

Gruss
Bernd

Markus Pitha

unread,
Apr 23, 2007, 4:32:57 PM4/23/07
to
Hallo,

Bernd Eckenfels schrieb:


> Du kannst resourcen aus dem JAR nicht mit einem File Reader lesen, sondern
> musst ueber den Classloader, z.b. getReseouceAsStream("/bla/fasel") machen.

Ok, da kann ich wohl lange probieren. Wozu dient dann die Option
"Depends-On" im Manifest-File?

Bernd Eckenfels

unread,
Apr 23, 2007, 4:51:36 PM4/23/07
to
Markus Pitha <newsgrou...@pithax.net> wrote:
> Ok, da kann ich wohl lange probieren. Wozu dient dann die Option
> "Depends-On" im Manifest-File?

Hab ich noch nie gesehen/benutzt.

Gruss
Bernd

Markus Pitha

unread,
Apr 23, 2007, 5:00:46 PM4/23/07
to
Bernd Eckenfels schrieb:

> Hab ich noch nie gesehen/benutzt.

Ich stieß auch erst vorher darauf, als ich eine Lösung zu diesem Problem
suchte.
Übrigens habe ich Probleme, ein File mit einem derartigen InputStream
einzulesen. Wie geht man hier vor?
Bei dne Grafiken scheint es zu funktionieren:

BufferedImage bufImage =
ImageIO.read(ImageIO.createImageInputStream(this.getClass().getResourceAsStream(imgname)));

Aber wie sieht es bei einer Textdatei aus?
Ich versuche schon die ganze Zeit sämtlich Reader, und bin derweil zu
folgendem Ergebnis gekommen:

BufferedInputStream fileinput = new
BufferedInputStream(this.getClass().getResourceAsStream(arrayFileName));

Dummerweise kann ich nun kein readline() mehr ausführen und ein read()
liefert mir ein int zurück. Wie könnt man hier am besten vorgehen?

Danke im Voraus,
Markus

Bernd Eckenfels

unread,
Apr 23, 2007, 5:09:31 PM4/23/07
to
Markus Pitha <newsgrou...@pithax.net> wrote:
> BufferedInputStream fileinput = new
> BufferedInputStream(this.getClass().getResourceAsStream(arrayFileName));

BufferedReader fileInput = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(arrayFileName)));


kannst du nehmen.

Gruss
Bernd

Markus Pitha

unread,
Apr 24, 2007, 9:54:37 AM4/24/07
to
Hallo,

Bernd Eckenfels schrieb:


> BufferedReader fileInput = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(arrayFileName)));

Vielen Dank. So funktioniert sowohl das Einlesen, als auch das JAR-Archiv.

Markus

0 new messages