Programm kann Audio Datei nicht finden

Java3d

Mitglied
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:
Java:
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
 
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.
 
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)
 
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
 
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?
 
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
 
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.
 

Zurück
Oben