Java sound Spielt nicht in JAR?
Hallo wenn ich ein programm mit Eclipse schreibe das sound abspielt funktioniert das wunderbar aber in einer JAR spielt es keinen ton, habe schon im internet geschaut wo viele dieses problem hatten aber ich habe trotzdem nichts gefunden was mir weitergeholfen hat alles was dort stand dass man irgendwie getResourceAsStream mit getResource replacen muss kann mir jemand den gefixten source code hier schreiben ? hier mein code
Scanner scanner = new Scanner(System.in);
File file = new File("src/audio.wav");
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
Clip clip = AudioSystem.getClip();
clip.open(stream);
clip.start();
String response = scanner.next();
2 Antworten
Das wird den Pfad nicht finden. Im Endeffekt wirst du da wohl den Pfad anders angeben und den Ressourcen-Zugriff anders gestalten müssen.
Wie genau, kann ich dir schlecht sagen, ich habe bisher nur wenig mit JARs gearbeitet. War da aber auch gefrickle, bis es funktioniert hat.
Wenn ein Java-Programm als jar-Datei ausgeliefert werden soll, muss die jar-Datei alles enthalten, was das Programm braucht. Die Audiodatei muss als sogenannte Resource in der jar-Datei vorhanden sein. Die üblichen Java-Entwicklungsumgebungen bieten schon die Möglichkeit, festzulegen, welche Resourcen in eine jar-Datei kopiert werden sollen, aber die Bedienung der Entwicklungsumgebungen ist leider so uneinheitlich, dass ich dazu nichts allgemeingültiges sagen kann.
Tip: Du könntest zunächst einmal prüfen, was in deiner jar-Datei eigentlich drin ist. Das geht ganz einfach, weil ein jar-Datei nichts anderes als eine zip-Datei ist. Ein Programm, mit dem du den Inhalt von zip-Dateien ansehen kannst, kannst du auch benutzen, um dir anzeigen zu lassen, was in einer jar-Datei so alles drin ist. Prüfe also, ob die Datei audio.wav in der jar-Datei enthalten ist.
Wenn die wav-Datei in der jar-Datei enthalten ist, ist die nächste Frage, wie der Zugriff erfolgen kann. Das ist immer ein trickreiches Thema. Der von dir gezeigte Code könnte funktionieren, wenn das ganze src-Verzeichnis deines Projekts in die jar-Datei kopiert wird. Das kann man machen, und für einen ersten Versuch, die Dinge zum Laufen zu bringen, ist das nicht einmal ungeschickt.
Üblicher ist es, Resourcen - also Sounddateien, Bitmaps, Textdateien u.s.w - in ein Resourcenverzeichnis zu tun und nur dieses Resourcenverzeichnis in die jar-Datei zu kopieren. Das kann man bei Eclipse irgendwie einstellen, suche mal nach "Eclipse: copy resource files to output directory"
Zum Zugriff auf eine Resource mache ich meist so:
Class classOfMain;
InputStream is;
classOfMain= Main.class; // Main ist die Klasse des Hauptprogramms
is = classOfMain.getResourcesAsStream("res/audio.wav");
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
Dabei ist "res/audio.wav" relativ zum Verzeichnis build/classes zu lesen. Wenn du die Audiodatei dort nicht in ein Unterverzeichnis res tust, sondern direkt in build/classes ablegt, musst du "audio.wav" schreiben und wenn du das ganze src-Verzeichnis in build/classes vorhältst, muss das Argument von getResourceAsStream natürlich "src/audio.wav" lauten.