Wie kann man diverse Ressourcen wie Bild- oder Sounddateien laden auch wenn sie sich innerhalb einer *.jar befinden?

Die Klasse ClassLoader ermöglicht es, Ressourcen auch innerhalb von *.jar-Dateien zu laden. So ist man von der jeweiligen Dateistruktur unabhängig und kann Bild-, Sound- oder Video-Dateien mit einem Programm ausliefern.

In der Methode play() wird ein sog. ClassLoader verwendet, um eine Ressource, in diesem Falle eine Sound-Datei, zu laden. Die Methode getClassLoader() ermittelt die Referenz, die die ladende Klasse auf den ClassLoader besitzt. Dieser stellt mit getRessource() eine Methode bereit, die die gewünschten Daten innerhalb des Classpath sucht. Sie bekommt hierzu einen Pfad als String übergeben, der relativ zum Wurzelverzeichnis des Classpath angegeben werden muss.

Bsp.:
Package der ladenden Klasse: <Classpath-Wurzelverzeichnis>de.yourwebs.test
Sounddatei: <Classpath-Wurzelverzeichnis>sound/mysound.wav
notwendige Pfadangabe: sound/mysound.wav

Das Ergebnis ist ein URL-Objekt, das der statischen Methode newAudioClip() der Klasse Applet übergeben wird. Sie liefert ein AudioClip-Objekt, das über dessen Methode play() abgespielt wird.

import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;

public class SoundTest {

    public void play() {
        String path = "sound/applauselong.wav";
        URL url = getClass().getClassLoader().getResource(path);
        AudioClip sound = Applet.newAudioClip(url);
        sound.play();
    }

    public static void main(String[] args) {
        SoundTest st = new SoundTest();
        st.play();
    }
}

Siehe zu diesem Thema auch den Artikel 'Bilder laden'.

Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.