# Programm kann Audio Datei nicht finden



## Java3d (10. Dez 2015)

Hallo,

könnt ihr mir helfen? Ich möchte eine .wav-Datei mit Java abspielen, aber ich bekomme die
Fehlermeldung, dass der Classpath = null sei. Nach einem kurzen Test hat sich das bestätigt,
soweit ich es sehe. Aber wie bekomme ich denn diesen Pfad, der mir fehlt? Eclipse ansich zeigt mir keine Fehlermeldung am Rand an. Das Einzige, was anders ist, ist meine Java-Version(bei mir 1.8 anstatt 1.7). Ich habe alles genauso gemacht, wie der Typ im folgenden YouTube-Video:






Hier ist mein Code:

```
package org.drgnst.sound;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;


public class Sound
{
   public static String variante1 = "/Sound/res/Amin.wav";
   public static String variante2 = "C:\\Users\\Andreas\\workspace\\Sound\\res\\Amin.wav";
   public static String variante3 = "C:/Users/Andreas/workspace/Sound/res/Amin.wav";
   public static String variante4 = "C:\\Users\\Andreas\\Music\\Amin.wav";
   public static String variante5 = "C:/Users/Andreas/Music/Amin.wav";
   public static String variante6 = "/Sound/src/org/drgnst/sound/Amin.wav";
   
   
   public static void main(String[] args)
   {
     try{

       System.out.println(ClassLoader.getSystemResource(variante6));
       Clip clip = AudioSystem.getClip();
       AudioInputStream ais = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(variante6));
       
       clip.open(ais);
       clip.start();
       Thread.sleep(2000);
       clip.close();
     }
     catch(Exception e){
       e.printStackTrace();
     }
     
     
   }
}
```

Für Tipps wäre ich sehr dankbar.

Gruß
Java3d


----------



## Joose (10. Dez 2015)

Bitte die Fehlermeldung hier ebenfalls posten (Copy&Paste).
So kann man sich am ehersten einen Bild vom Fehler als die Beschreibung "Fehlermeldung, dass der Classpath = null sei."
Jede Exception hat eine entsprechende Meldung und einen StackTrace.


----------



## Java3d (10. Dez 2015)

Eclipse gib das aus:

null
java.lang.NullPointerException
   at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
   at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
   at org.drgnst.sound.Sound.main(Sound.java:26)


----------



## Joose (10. Dez 2015)

Ah ok ... er kann deine Datei einfach nicht finden. Nichts mit "classpath = null" oder so


----------



## kneitzel (10. Dez 2015)

Also das sieht mir eher danach aus, dass er die angegebene Ressource nicht laden konnte. 

getRessourceAsStream gibt null zurück, wenn die Ressource nicht gefunden wurde und das führt dann zu der NullPointerException.

Das wäre zumindest jetzt meine Interprettation.

Konrad


----------



## Java3d (10. Dez 2015)

Also dann gebe ich den Pfad falsch ein? Denn die Dateien liegen zu 100% auf dem jeweiligen Pfad meiner Festplatte(Copy und Paste aus den Dateieigenschaften), die ich als String in verschiedenen "Varianten" ausprobiert habe. Warum findet Eclipse die dann nicht?


----------



## kneitzel (10. Dez 2015)

Hallo,

dieser getRessourceAsStream Aufruf in der Klasse wird zu einem getRessourceAsStream Aufruf im jeweiligen class loader. Und je nach class loader, der genutzt wurde, sucht er dann die Datei. Hier ist dann wichtig, die Ressource entsprechend vorzugeben. In erster Linie ist der Aufruf gut, um z.B. eine Ressource aus einer jar Datei zu laden oder eben aus einem entsprechenden Verzeichnis innerhalb des Classpaths.

Also in der IDE sicher stellen, dass die Ressource an die richtige Stelle kommt. Kannst ja mal in dein out Verzeichnis (oder wo Deine ide eben die compilierten Dateien hinlegt) schauen, wo genau die Ressource zu finden ist. Und dann relativ vom eigentlichen Hauptverzeichnis den Pfad angeben. Variante1 hört sich recht gut an - so die Ressource-Datei halt entsprechend behandelt wird. wenn die Ressourcen nicht entsprechend zur Verfügung gestellt werden, dann hast Du damit auch keinen Zugriff.

Aber Du kannst natürlich auch direkt zugreifen (Varianten 2 und 4), aber dann erstellst Du direkt den Stream und nutzt nicht getRessourceAsStream Aufruf.

Konrad


----------



## Java3d (12. Dez 2015)

GELÖST!!!

Danke, ihr hattet Recht. Ich habe die Sounds nicht importiert, sondern nur in einen Ordner innerhalb des Projektordners reinkopiert und auf diesen Pfad verwiesen. Da konnte Eclipse die nicht finden. Also habe ich ein neues Package erstellt und über die Import-Funktion die Sounds importiert. 

Danach konnte Eclipse sie zwar finden, aber nicht abspielen. Das lag einfach nur daran, dass ich mit Cubase ein eigenes .wav erstellt habe und das Format(bezüglich Bitrate oder so) nicht unterstützt wurde.

Am Ende, als ich daraus eine ausführbare jar Datei gemacht habe, musste ich noch die Methode "getResourceAsStream()" zu "getResource()" umschreiben, weil der Sound sonst so nicht abgespielt werden konnte. Aber danach konnte ich das Programm mit Ton selbst auf einem anderen Rechner ohne weitere Ordner und Inhalte abspielen.


----------

