# Musik Datei lädt nicht?



## HackerBanane (20. Dez 2020)

Hallo!
Ich programmiere gerade ein kleines Spiel für meine Brüder und möchte natürlich auch Musik einbauen.
Die Musik hab ich bereits erstellt und auch in eine .waw Datei umgewandelt.
Mit Anleitung habe ich eine Klasse erstellt, und probiert die Musik so abzuspielen (siehe unten).
Wenn ich mit Eclipse nur die Klasse starte funktioniert es einwandfrei und die Musik wird abgespielt.
Sobald ich aber das ganze Projekt starte, in dem ich in der Main Klasse die Music.java Klasse mit
"new Music();" hinzufüge passiert rein gar nichts 
Es kommt auch keine Fehlermeldung oder sonst etwas und das Programm läuft ganz normal weiter.
Vielen Dank schonmal für jede Hilfe
LG
Laurens


```
import java.io.File;

import java.io.IOException;

import java.util.Scanner;


import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.Clip;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.UnsupportedAudioFileException;


public class Music {



    public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException {

        System.out.println("hallo");

        Scanner scanner = new Scanner(System.in);

    

        File musicFile = new File("audio/FunBanane.wav");

        AudioInputStream inputStream = AudioSystem.getAudioInputStream(musicFile);

        Clip clip = AudioSystem.getClip();

        clip.open(inputStream);

        clip.loop(clip.LOOP_CONTINUOUSLY);

        clip.start();

    

        String response = scanner.next();

    

    }



}
```


----------



## HackerBanane (20. Dez 2020)

Das mit dem Code einfügen hat gerade irgendwie net Funktioniert...


----------



## mihe7 (24. Dez 2020)

HackerBanane hat gesagt.:


> in dem ich in der Main Klasse die Music.java Klasse mit
> "new Music();" hinzufüge passiert rein gar nichts


Natürlich nicht. Du erzeugst ja einfach ein neues Music-Objekt und führst keine Methode darauf aus. Mach mal aus dem main eine Instanzmethode (z. B. public void play()) und dann schreibst Du in der anderen Klasse:

```
Music music = new Music();
music.play();
```


----------



## HackerBanane (24. Dez 2020)

Wenn ich das machen kommt eine Fehlermeldung die sich andauernd wiederholt...

at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:212)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:154)
    at java.desktop/com.sun.media.sound.SunFileReader.getAudioInputStream(SunFileReader.java:117)
    at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1062)
    at de.hackerbanane.fußballAkkon.Music$1.run(Music.java:30)
    at java.base/java.lang.Thread.run(Thread.java:832)
java.io.FileNotFoundException: audio\FunBanane.wav (Das System kann den angegebenen Pfad nicht finden)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:212)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:154)
    at java.desktop/com.sun.media.sound.SunFileReader.getAudioInputStream(SunFileReader.java:117)
    at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1062)


----------



## kneitzel (24. Dez 2020)

HackerBanane hat gesagt.:


> java.io.FileNotFoundException: audio\FunBanane.wav


Er kann die angegebene Datei nicht finden. Du hast diese relativ zum Ausführungsverzeichnis angegeben. Entweder Du hast einen absoluten Pfad (Wenn die Dateien irgendwohin heruntergeladen werden oder so) oder wenn es feste Ressourcen deiner Applikation sind: Binde sie als Ressourcen in die Applikation ein und nutze den Classloader zum laden z.B. mittels getClass().getResourceAsStream(....).


----------



## HackerBanane (24. Dez 2020)

mit getClass().getResource habe ich schlechte erfahrung beim Exportieren gemacht, weil dann der Exportierte .jar file die Datei nicht dabei hat...


----------



## HackerBanane (24. Dez 2020)

Mit nem File funktioniert das net, wie müsste ich das dann machen?


----------



## mihe7 (24. Dez 2020)

HackerBanane hat gesagt.:


> mit getClass().getResource habe ich schlechte erfahrung beim Exportieren gemacht, weil dann der Exportierte .jar file die Datei nicht dabei hat...


Da hat aber das eine mit dem anderen rein gar nichts zu tun. Und ob Du schlechte Erfahrungen gemacht hast, ist jetzt auch nicht der Maßstab. Ressourcen werden über den Classpath (getResource & Co.) geladen und nicht anders.

Abgesehen davon funktioniert das prinzipiell auch mit File, dann musst Du Dein Programm in dem Verzeichnis ausführen, das das Verzeichnis adio mit der Datei FunBanane.wav enthält oder aber Du gibst im Code den absoluten Pfad zur Datei an.


----------



## mrBrown (25. Dez 2020)

HackerBanane hat gesagt.:


> mit getClass().getResource habe ich schlechte erfahrung beim Exportieren gemacht, weil dann der Exportierte .jar file die Datei nicht dabei hat...


Eigentlich ist das genau andersrum – nur Resourcen sind in der exportieren Jar dabei (alles andere nicht), und Resourcen kann man nur mit getResource laden.


----------

