2009-03-09 2 views
2

Следующий код используется для воспроизведения звукового файла в моем Java-апплета:Что заменить этот код Java?

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(); 
    } 

Это работает, когда я запустить апплет локально с помощью Eclipse, но если я пытаюсь упаковки его в .jar и запустить его как апплет в веб-браузере, он не работает. Комментируя этот код, программа работает.

Что я должен заменить приведенный выше код так, чтобы он работал в апплете?

ответ

4

Попробуйте использовать getResourceAsStream() на ClassLoader вместо нового FileInputStream(). Это вернет InputStream, который вы можете передать в AudioStream. Так что-то вроде:

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

Использовать getClassLoader().getResourceAsStream() вместо new FileInputStream(...). Здесь нет локального файла (возможно, например, при использовании файла jar). В основном вы хотите получить поток для звуковых данных, и когда вы извлекаете ресурс из пути к классам, getResourceAsStream() - это самый простой способ сделать это.

(Вы можете использовать getResource() с последующим openStream(), если вы хотите, но там нет особого смысла.)

2

Посмотрите на метод getResourceAsStream() в java.lang.ClassLoader классе.

Это будет работать, даже если у вас нет JAR, если соответствующие файлы находятся в вашем CLASSPATH.

4

Либо использовать ClassLoader.getResourceAsStream или URL.openStream. Не забудьте закрыть потоки, чтобы избежать утечек ресурсов.

Кроме того, проверьте, чтобы увидеть, если AudioClip класс соответствует вашим потребностям:

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; 
    }