2016-04-24 8 views
2

Ich versuche, eine Anwendung zu erstellen, wo, wenn ich auf ein JButton klicke, ein Lied abgespielt wird. Ich habe bereits herausgefunden, wie man JButtons spezifiziert. Ich kann jedoch keinen Weg finden, Sound zu spielen. Ich werde sun.audio nicht verwenden, so viele der Threads, die ich angeschaut habe, haben nicht funktioniert. Ich habe viele minderwertige Antworten gefunden. Irgendwann habe ich mich auf diesen Code festgelegt.Dateien zum Abspielen von Sound finden

public static synchronized void playSound(final String url) { 
    new Thread(new Runnable() { 
public void run() { 
    try { 
     Clip clip = AudioSystem.getClip(); 
     AudioInputStream inputStream = AudioSystem.getAudioInputStream(
     Main.class.getResourceAsStream("/path/to/sounds/" + url)); 
     clip.open(inputStream); 
     clip.start(); 
     } catch (Exception e) { 
     System.err.println(e.getMessage()); 
     } 
    } 
    }).start(); 
} 

In meinem src-Ordner habe ich einen Ordner namens "Songs". Ich änderte den Dateipfad zu diesem: /Songs/

Dann habe ich versucht, die Funktion aufrufen eine WAV-Datei mit:

playSound("song.wav"); 

Und dann bekomme ich einen Null-Fehler. Ich glaube, das liegt daran, dass der Dateipfad nicht erkannt wird. Die Antwort auf mein Problem ist höchstwahrscheinlich sehr offensichtlich, aber irgendwie kann ich es nicht finden.

Antwort

0

Setzen Sie song.wav in den gleichen Ordner Ihrer Main-Klasse, dann wird getResourceAsStream es finden.

Wenn Sie Eclipse verwenden, kann die WAV-Datei automatisch in den Ausgabeordner kopiert werden.

Sie könnten eine Klasse für ein anderes Java-Paket erstellen, damit Ihr Einstiegspunkt nicht durch Assets verunreinigt wird.

Dieser Messwert könnte Ihnen helfen: http://www.thinkplexx.com/learn/howto/java/system/java-resource-loading-explained-absolute-and-relative-names-difference-between-classloader-and-class-resource-loading

Verwandte Themen