Воспроизведение аудио из файла JAR - PullRequest
1 голос
/ 15 февраля 2012

Я нашел много тем на эту тему, но я до сих пор не могу заставить его работать. Это легко работает с компилятора, но не из файла JAR. Кажется, jar-файл находит аудиофайл, но он просто воспроизводит его.

import sun.audio.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

@SuppressWarnings({"serial","restriction"})
public class JarSoundTest1 extends JFrame { 
  JButton button;
  InputStream in;
  AudioStream as;

  public JarSoundTest1() throws Exception {

      JOptionPane.showMessageDialog(null, this.getClass().getResource("blopp.wav"));          

      button = new JButton("Click to Blopp!");
      button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                in = this.getClass().getResourceAsStream("blopp.wav");
                as = new AudioStream (in);
                AudioPlayer.player.start(as);

                JOptionPane.showMessageDialog(null, "try");

            }catch(Exception ex){

                ex.printStackTrace();
                JOptionPane.showMessageDialog(null, "catch");               
            }
        }       
      });
      add(button);    
  }

  public static final void main(String[] args) throws Exception {
      JFrame frame = new JarSoundTest1();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(200, 200);
      frame.setVisible(true);     
  }  
}

JOptionPane отображает «try» при каждом нажатии кнопки, указывая, что файл найден, я предполагаю? По-прежнему нет звука. Я попытался использовать аудиофайлы, размещенные как внутри, так и вне файла JAR. Помогите понять это высоко ценится.

1 Ответ

1 голос
/ 04 февраля 2014

Хорошо, я наконец понял. Я не думаю, что это проблема со звуком, я совершенно уверен, поскольку я могу получить wav для игры с кодом, очень похожим на ваш, это проблема с ресурсами в jar-файлах, которая может быть довольно сложной. Я бы предложил следующее, основываясь на экспериментах по редактированию приведенного выше кода:

getClass против getClassLoader

Если вы используете getClass, путь должен начинаться с косой черты, /. Итак, если ваш .wav находится на верхнем уровне, ./blopp.wav - это то, что нужно. Скорее всего, это единственная корректировка, которая вам понадобится, если файл .wav распознается sun.audio. *.

Если вы можете найти ресурс в банке, но не слышите звук, возможно, попробуйте другой файл .wav. Некоторые хорошие WAV-файлы здесь

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