2009-03-09 14 views
2

Der folgende Code wird verwendet, um eine Sounddatei in meinem Java-Applet abzuspielen:Was soll diesen Java Code ersetzen?

public synchronized void play() { 
    try { 
      //Here filename is a URL retreived through 
      //getClassLoader().getResource() 
      InputStream in = new FileInputStream(filename.getFile()); 
      AudioStream as = new AudioStream(in); 
      AudioPlayer.player.start(as); 

    } catch (IOException e) { 
      e.printStackTrace(); 
    } 

Es funktioniert, wenn ich das Applet lokal mit Eclipse starte, aber wenn ich versuche es in einer .jar zu packen und es als Applet auszuführen im Webbrowser funktioniert es nicht. Wenn Sie diesen Code kommentieren, funktioniert das Applet.

Was soll ich den obigen Code ersetzen, damit es im Applet funktioniert?

Antwort

4

Versuchen Sie es mit getResourceAsStream() auf dem Classloader statt new Fileinputstream(). Dadurch wird ein InputStream zurückgegeben, den Sie an AudioStream übergeben können. So etwas wie:

InputStream in = getClassLoader().getResourceAsStream(getClassLoader().getResource()); 
AudioStream as = new AudioStream(in) 
3

Verwenden Sie getClassLoader().getResourceAsStream() anstelle von new FileInputStream(...). Es gibt hier keine lokale Datei (möglicherweise bei Verwendung einer JAR-Datei). Grundsätzlich möchten Sie einen Stream zu den Sound-Daten erhalten, und wenn Sie eine Ressource aus dem Klassenpfad holen, ist getResourceAsStream() der einfachste Weg, dies zu tun.

(Sie können getResource() von openStream() gefolgt verwenden, wenn Sie wollen, aber es gibt nicht viel Sinn.)

2

Werfen Sie einen Blick auf die getResourceAsStream() Methode in der java.lang.ClassLoader Klasse.

Dies funktioniert auch dann, wenn Sie kein JAR haben, solange sich die relevanten Dateien in Ihrem CLASSPATH befinden.

4

Verwenden Sie entweder ClassLoader.getResourceAsStream oder URL.openStream. Denken Sie daran, Ihre Streams zu schließen, um Ressourcenlecks zu vermeiden.

Alternativ prüfen, ob die AudioClip Klasse Ihren Bedürfnissen entspricht:

private AudioClip sound = null; 

    private AudioClip getSound() { 
    if (sound == null) { 
     ClassLoader classLoader = TestApplet.class 
      .getClassLoader(); 
     URL url = classLoader.getResource("assets/sound.wav"); 
     sound = JApplet.newAudioClip(url); 
    } 
    return sound; 
    } 
Verwandte Themen