从jar文件播放音频

时间:2012-02-15 00:37:55

标签: java audio jar

我已经找到了很多关于这个主题的线索,但我仍然没有得到它的工作。它可以从编译器轻松工作,但不能从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 个答案:

答案 0 :(得分:1)

好的,我终于明白了。我不认为这是一个合理的问题,我很确定,因为我可以使用与你的代码非常相似的代码,这是罐子里的资源问题,这可能非常棘手。基于编辑上述代码的实验,我建议以下内容:

getClass vs getClassLoader

如果使用getClass,则路径必须以正斜杠/开头。所以,如果你的.wav处于最高级别,那么./blopp.wav就是你要走的路。如果.wav文件被sun.audio识别,那么这就是你需要的唯一调整。*。

如果您可以在jar中找到资源但无法听到音频,可以尝试使用其他.wav文件。一些好的wav文件是here

相关问题