我正在使用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中运行?其他一切都很好。这只是表演的音乐。
我已经坚持了一段时间,所以任何建议都将不胜感激!
答案 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);
}