Zugriff auf JAR Inhalte

Barzille

Grünschnabel
Hallo Community,
wer kann mir verraten, wie ich auf Ressourcen in einem JAR zugreife?

Folgendes Szenario:

Ich habe eine Java-Application, dass ein package x beinhaltet, nun habe ich Mp3 Files (die sollen später als sounds abgespielt werden). Ich benutze jlayer zum Abspielen der Mp3s, das klappt auch wunderbar mit Eclipse. Zu diesem Zeitpunkt habe ich einfach nur den Dateinamen der Mp3 angegeben, die im obersten Verzeichnis des Projektes liegt. Hier auszugsweise Code der Klasse Y.java im Package x:
Code:
file = new FileInputStream("test.mp3");
mp3player = new javazoom.jl.player.Player(file);
...

Wenn ich allerdings das ganze nun in ein JAR umwandle, funktionert alles bis auf die Mp3 Ausgabe, da bekomme ich dann eine java.io.FileNotFoundException. Das kann ich auch gut verstehen ;)
Ich habe es dann mit
Code:
myclass.class.getProtectionDomain().getCodeSource().getLocation()+"test.mp3"
versucht, aber auch das ohne Erfolg.
Gibt es da einen speziellen Kniff um an die Ressourcen ranzukommen, die im jar liegen?

Danke

Maik
 
Hat es denn einen Grund, warum du die MP3s in das Jarfile legst? Ich würde die MP3 einfach ins gleiche Verzeichnis legen, wie die Jar (oder vllt besser noch in ein Unterverzeichnis).

Wenn ich mich nicht irre, dann wirst du ohne weiteres auch nicht auf Ressourcen in einer Jar zugreifen können (ich lasse mich aber auch gerne eines besseren belehren). Eine Jar ist ja eigentlich nichts anderes als ein Archiv. Da müsstest du die Dateien darin erstmal auspacken.

MfG
Daniel
 
Hallo!

Gibt es da einen speziellen Kniff um an die Ressourcen ranzukommen, die im jar liegen?

Wenn ich mich nicht irre, dann wirst du ohne weiteres auch nicht auf Ressourcen in einer Jar zugreifen können (ich lasse mich aber auch gerne eines besseren belehren). Eine Jar ist ja eigentlich nichts anderes als ein Archiv. Da müsstest du die Dateien darin erstmal auspacken.
Ja ein Jar ist im Prinzip nichts anderes als ein ZipArchiv, aber trotzdem kann man von Java aus ohne Probleme Dateien daraus lesen ohne das jar vorher selbst auspacken zu müssen.

Versuchs mal mit:
Java:
InputStream introSoundInputStream = Bla.class.getClassLoader().getResourceAsStream("music/intro.mp3");
Wobei Bla.class eine Klasse aus dem entsprechenden Jar ist...

Gruß Tom
 
Zurück