Packages in Jar-Datei

Hallo,
habe gerade ein kleines Java Game Tutorial gemacht und habe ein Problem mit der .jar Datei. Also folgendes:
Ich habe 2 Ordner "pics" und "sound", diese befinden sich in "build/classes/.." Ordner. Also selbe Ebene wie die .class Dateien(IDE ist Netbeans). Im Tutorial befinden sich die ganzen Klassen einfach im default Package, also ohne Ordner direkt in "classes/..."
Bilder werden dann so geladen:
Java:
URL picURL = getClass().getClassLoader().getResource(pics/bild1.gif);
        try {
            source = ImageIO.read(picURL);
        } catch(IOException e) { }

"source" beinhaltet dann mein BufferedImage zur weiteren Bearbeitung.

So weit so gut. Das Spiel funktioniert in der IDE und auch als .jar Datei einwandfrei.

Jetzt habe ich eine kleine Veränderung vorgenommen. Ich habe für die Klassen Packages erstellt. Also(Hirarchie in Netbeans):
Java-Project
----Source Packages
------------UI
------------Sound

Also anstatt die Klassen direkt in Source Packages(werden dann bei Netbeans im "default Package" abgelegt, das default Package erscheint nur in Netbeans, ist also kein Ordner) abzulegen, habe ich ein Package "UI" und "Sound" erstellt.
Bilder lade ich dann so:

Java:
URL picURL = getClass().getClassLoader().getResource(UI/pics/bild1.gif);
         try {
            source = ImageIO.read(picURL);
        } catch(IOException e) { }

Habe nur das "UI" beim Pfad hinzugefügt. In der IDE funktioniert das alles einwandfrei, allerdings nicht als .jar Datei. Das versteh ich ehrlich gesagt nicht. Irgendwie können die Bilder nicht geladen werden.
Exception(ist nur ein Ausschnitt):
Java:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
        at javax.imageio.ImageIO.read(ImageIO.java:1362)
Weiss jemand Rat?

Danke schonmal im Voraus
 

sylo

Bekanntes Mitglied
Hi

probier mal mit vorgestelltem Slash:
Java:
URL picURL = getClass().getClassLoader().getResource(/UI/pics/bild1.gif);
         try {
            source = ImageIO.read(picURL);
        } catch(IOException e) { }

Ändert sich da was?

Grüße
sylo
 
Hi,
ne, bekomme dann sogar schon in Netbeans die Exception.
Hier mal die Hirarchie der .jar:
Java:
Meta-Inf
     ------Manifest.MF
Sound
     ------SoundLib.class
UI
     ------pics
            -------bilder.gif
     ------sound
            -------sound.wav
     ------Klasse1.class
     ------Klasse2.class
                   .
                   .
                   .
                   .
.netbeans_automatic_build

Also mein Entry-Point geb ich in der Manifest mit UI.MainClass an. Das funktioniert ja auch, frage mich nur wieso dann die Bilder nicht gefunden werden. Über den ClassLoader sollte ich doch schon im Hauptverzeichnis der .jar sein oder? Die MainClass wird ja schliesslich auch gefunden.

[Edit]

Habe jetzt den vorgegebenen Code des zweiten Teils(anderes Spiel) des Tutorials in eine .jar Datei gepackt und das funktioniert. Der classes Ordner hat hier mehrere Unterordner:
level
main
META-INF
pics
tutorial

In "main" befindet sich Klasse mit der main-Methode. So, jetzt ist hier aber der "pics" Ordner wieder direkt im .jar Hauptverzeichnis.
Kann das sein, dass es irgendwie Probleme gibt wenn die Bilder in einen zweiten Unterordner sind?
Also :
UI/pics/bild.gif --------------> funktioniert nicht
pics/bild.gif --------------> funktioniert
 
Zuletzt bearbeitet:
I

imho1001

Gast
Also soweit ich weiß macht das keinen Unterschied. Ich habe mir eine Beispiel Lib gebaut die so aussieht:

SingleLib (Java-Projekt)
|
+---src (Eclipse source folder)
|
+---UI (richtiges package)
|
+--- MainClass.class
|
+---pics (richtiges package)
|
+--- picture.gif


Das führt zu einer .jar Struktur die du unten erwähnt hast.

Laden kann ich die Bilder so:
Java:
public class MainClass {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		URL url = MainClass.class.getClassLoader().getResource("UI/pics/picture.gif");
		BufferedImage i = ImageIO.read(url);
		System.out.println("Größe des Bildes: " + i.getHeight());
	}

}

Starten per Console:
java -jar SingleLib.jar

Ausgabe:
Größe des Bildes: 777


Also wie gesagt, in wievielen Unterpackages eine Resource liegt ist wohl nicht wichtig. Jedenfalls funktioniert es bei mir so...
 
I

imho1001

Gast
Nochmal mit Format ;)

Also soweit ich weiß macht das keinen Unterschied. Ich habe mir eine Beispiel Lib gebaut die so aussieht:
Java:
SingleLib (Java-Projekt)
   |
   +---src (Eclipse source folder)
           |
           +---UI (richtiges package)
                  |
                  +--- MainClass.class
                  |
                  +---pics (richtiges package)
                          |
                          +--- picture.gif

Das führt zu einer .jar Struktur die du erwähnt hast.

Laden kann ich die Bilder so:
Java:
public class MainClass {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		URL url = MainClass.class.getClassLoader().getResource("UI/pics/picture.gif");
		BufferedImage i = ImageIO.read(url);
		System.out.println("Größe des Bildes: " + i.getHeight());
	}

}

Starten per Console:
java -jar SingleLib.jar

Ausgabe:
Größe des Bildes: 777


Also wie gesagt, in wievielen Unterpackages eine Resource liegt ist wohl nicht wichtig. Jedenfalls funktioniert es bei mir so...
 
Hi,
hab auch mal zum Test ein neues Projekt gemacht und da funktionierts auch.
Ich komm aber einfach nicht drauf wo der Fehler beim Java-Game sein könnte.
Also:
Java:
URL picURL = getClass().getClassLoader().getResource(path);
liefert mir "null". Die String Variable "path" enthält "UI/pics/bild.gif".
"getResource" liefert ja auch null wenn man keine Zugriffsrechte hat, kann das vielleicht sowas sein?
Wäre dann aber wahrscheinlich auch in der IDE schon. Ich poste mal bissl mehr Code:

Methode zum Laden der Bilder:

Java:
private BufferedImage[] loadPics(String path, int pics) {

        BufferedImage[] anim = new BufferedImage[pics];
        BufferedImage source = null;
       
        URL picURL = getClass().getClassLoader().getResource(path);
        
        try {
            
           source = ImageIO.read(picURL);
            
        } catch(Exception e) {
        }

        for(int i = 0; i < pics; i++) {
            anim[i] = source.getSubimage(i * source.getWidth() / pics,
                                         0, source.getWidth() / pics,
                                         source.getHeight());
        }
        return anim;
    }

Bei der Initialisierung rufe ich dann für verschiedene Bilder die Methode auf. Hier mal ein Aufruf:

Java:
BufferedImage[] heli = loadPics("UI/pics/heli.GIF", 4);

hatte die Dateiendung "GIF" anfangs auch schon klein geschrieben, bring aber auch nichts.

Wenn ich die .jar ausführe wird die Exception im try-Block "source = ImageIO.read(picURL);" geworfen, da eben picURL=null.
 
Z

ZufälligerLeser

Gast
Nun ja,
Versuch mal, im selben eine neue JPG-Graphik zu erstellen und den Pfad anpassen, um herauszufinden,
ob es an der Dateiendung liegt.
Wenn das trotzdem nicht klappt: liegt die Klasse mit
Java:
URL picURL = getClass().getClassLoader().getResource(UI/pics/bild1.gif);
         try {
            source = ImageIO.read(picURL);
        } catch(IOException e) { }
im Sound-Package oder Source Package? Wenn sie im Sound-Package ist, den ganzen Pfad
(also mit C:/ bzw. wo auch immer du das hast) angeben. Sonst glaubt Java, dass UI/
im selben Ordner wie die .class Datei ist...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Packages in JAR-Datei einbinden Java Basics - Anfänger-Themen 10
J Packages erstellen Java Basics - Anfänger-Themen 7
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
A Exceptions und Packages Java Basics - Anfänger-Themen 6
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
Mxxxt Übersicht Java-Packages Java Basics - Anfänger-Themen 3
D Zusätzliche Packages benutzen? Java Basics - Anfänger-Themen 6
C Java Packages Konvention Namensvergabe Java Basics - Anfänger-Themen 3
B eclipse und packages weiterentwickeln Java Basics - Anfänger-Themen 5
B Compiler-Fehler Packages fehlen? Java Basics - Anfänger-Themen 5
J Eclipse + Java + Packages importieren Java Basics - Anfänger-Themen 7
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
S Richtlinien wie man Classen in Packages organisieren soll? Java Basics - Anfänger-Themen 3
G Packages -> was bringen sie? Java Basics - Anfänger-Themen 4
V Java Packages Java Basics - Anfänger-Themen 4
O Funktionen dateiübergreifend mit Packages Java Basics - Anfänger-Themen 6
J Zugriff auf Variable vom typ (default) durch Importieren des Packages? Java Basics - Anfänger-Themen 5
D Javadoc für Packages oder ganze Projekte Java Basics - Anfänger-Themen 5
U Zugriff auf andere Packages Java Basics - Anfänger-Themen 10
S Problem mit Packages Java Basics - Anfänger-Themen 9
C Klassen Main-Routine in Packages? Java Basics - Anfänger-Themen 7
L Konsole und packages Java Basics - Anfänger-Themen 8
B Packages in Eclipse umbennen Java Basics - Anfänger-Themen 12
V Packages: Cannot find symbol Java Basics - Anfänger-Themen 12
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
B Wie funktioniert der Import von Dritt-packages in Eclipse? Java Basics - Anfänger-Themen 5
K Collections Problem beim import von Packages Java Basics - Anfänger-Themen 10
M Tief verschachtelte Packages Java Basics - Anfänger-Themen 7
Z CLASSPATH + Packages Java Basics - Anfänger-Themen 6
N packages und finden von Klassen Java Basics - Anfänger-Themen 2
D Packages verwenden und in eigenes Projekt integrieren Java Basics - Anfänger-Themen 3
S Anfängerproblem mit Packages Java Basics - Anfänger-Themen 4
J Anfängerfrage zu Grundlagen von Packages Java Basics - Anfänger-Themen 7
B Unterklassen, Packages Java Basics - Anfänger-Themen 3
F Dateipfade mit Packages Java Basics - Anfänger-Themen 7
R mit klassen-instanzen arbeiten in packages Java Basics - Anfänger-Themen 10
F OOP Wrapper ermöglicht Zugriff für andere Packages? Java Basics - Anfänger-Themen 6
T Javac und Packages Java Basics - Anfänger-Themen 4
B Fragen zur Initialisierung/Zuweisung der Variable + Packages erstellen Java Basics - Anfänger-Themen 4
braindump Packages in verschiedenen Unterverzeichnissen Java Basics - Anfänger-Themen 3
G Verschiedene Packages Java Basics - Anfänger-Themen 3
R wo befinden sich die packages? Java Basics - Anfänger-Themen 5
S 2 Packages Java Basics - Anfänger-Themen 14
D packages importieren Java Basics - Anfänger-Themen 3
I Frage zu Packages Java Basics - Anfänger-Themen 19
T Anagram Game - warum ist es auf 2 Packages aufgeteilt? Java Basics - Anfänger-Themen 3
S problem mit packages Java Basics - Anfänger-Themen 7
G Konventionen für die Bezeichnung von Packages Java Basics - Anfänger-Themen 4
M problem mit packages Java Basics - Anfänger-Themen 5
D Packages mit Wizard erstellen Java Basics - Anfänger-Themen 2
S Woher Packages bekommen? Wie installieren? (Netbeans) Java Basics - Anfänger-Themen 4
B Packages einfach kopieren? Java Basics - Anfänger-Themen 13
B Fehler beim einbinden eines Packages Java Basics - Anfänger-Themen 6
G Aufgabe mit Packages Java Basics - Anfänger-Themen 3
G erstes Arbeiten mit Packages Java Basics - Anfänger-Themen 2
H javac mit meheren packages Java Basics - Anfänger-Themen 2
G Aus package auf andere eigene packages zugreifen? Java Basics - Anfänger-Themen 7
E import Anweisung und Packages Java Basics - Anfänger-Themen 3
F Pfadfrage in Packages und jar-Archiven Java Basics - Anfänger-Themen 3
P packages verwenden Java Basics - Anfänger-Themen 3
M Variabelzugriff auf fremde Packages Java Basics - Anfänger-Themen 5
D Probleme nach Einbindung einens neuen Packages Java Basics - Anfänger-Themen 5
T Packages erstellen und importieren? Java Basics - Anfänger-Themen 10
D Packages Java Basics - Anfänger-Themen 3
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
P wohin muss ich die packages kopieren? Java Basics - Anfänger-Themen 12
T Erstellen eigener packages Java Basics - Anfänger-Themen 6
S Importieren in Packages Java Basics - Anfänger-Themen 11
C packages, jars - Verstaendnisfrage Java Basics - Anfänger-Themen 7
L Problem mit Packages Java Basics - Anfänger-Themen 5
L Eigene Packages importieren Java Basics - Anfänger-Themen 2
N Packages definieren bzw. zum Classpath hinzufügen Java Basics - Anfänger-Themen 4
A Packages und Vererbung Java Basics - Anfänger-Themen 5
S Packages verwenden Java Basics - Anfänger-Themen 7
T Nerv! Packages und Classpath Java Basics - Anfänger-Themen 2
H probleme mit import von eigenen packages Java Basics - Anfänger-Themen 4
C Packages... Java Basics - Anfänger-Themen 7
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80

Ähnliche Java Themen


Oben