音乐无法在可执行.Jar文件中播放

时间:2013-06-11 02:29:03

标签: java executable-jar

我正在使用JLayer MP3库在我的程序中播放MP3文件。

我的老师告诉我们使用类似的东西:

imageLabel = new JLabel(ImageIcon(this.getClass().getResource("filename.jpg")));

如果我们要将程序导出为可执行的.jar文件,则加载我们的音乐和图像。但是,当我用我的音乐执行此操作时,我收到错误消息“构造函数MP3(URL)未定义”。

这是我的Homepage课程代码的一部分:

//Play music 
MP3 mp3 = new MP3(this.getClass().getResource("YGSA.mp3"));
mp3.play();

这是MP3类的代码部分:

public class MP3 {
private String filename;
private Player player; 

// constructor that takes the name of an MP3 file
public MP3(String filename) {
this.filename = filename;

}

public String toString() {
return filename;
}

public void close() { if (player != null) player.close(); }

// play the MP3 file to the sound card
public void play() {
try {
    FileInputStream fis     = new FileInputStream(filename);
    BufferedInputStream bis = new BufferedInputStream(fis);
    player = new Player(bis);
}
catch (Exception e) {
    System.out.println("Problem playing file " + filename);
    System.out.println(e);
}

// run in new thread to play in background
new Thread() {
    public void run() {
    try { player.play(); }
    catch (Exception e) { System.out.println(e); }
    }
}.start();
}

有没有其他方法可以加载音乐,以便它可以在.jar中运行?其他一切都很好。这只是表演的音乐。

我已经坚持了一段时间,所以任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

尝试使用资源作为流,而不是读取资源URL。贝娄是你需要做的一些改变。尝试重构变量名称。

更改您的调用以使用getResourceAsStream而不是getResource。 其次,更改MP3类构造函数以接收InputStream而不是String(也将您的fileName变量类型更改为InputStream。在此处重复它们的名称。

最后,更改播放方法以使用inputStream。

MP3 mp3 = new MP3(this.getClass().getResourceAsStream("YGSA.mp3"));
mp3.play();


 public MP3(InputStream filename) {
   this.filename = filename;

 }
public void play() {
try {
    BufferedInputStream bis = new BufferedInputStream(fis);
    player = new Player(bis);
}
catch (Exception e) {
    System.out.println("Problem playing file " + filename);
    System.out.println(e);
}