Чем заменить этот код Java? - PullRequest
2 голосов
/ 09 марта 2009

Следующий код используется для воспроизведения звукового файла в моем 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 ]

4 голосов
/ 09 марта 2009

Либо используйте 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;
  }
4 голосов
/ 09 марта 2009

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

InputStream in = getClassLoader().getResourceAsStream(getClassLoader().getResource());
AudioStream as = new AudioStream(in)
3 голосов
/ 09 марта 2009

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

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

2 голосов
/ 09 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...