【发布时间】:2019-12-19 19:29:01
【问题描述】:
我正在尝试访问 jar 文件中资源文件夹内的 MP3 文件。我遇到了一些问题,无法阅读。
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Logger;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;
public class MP3 {
private static final Logger logger = Logger.getLogger(Main.class.getName());
private BasicPlayer player;
/**
* Constructor
*/
public MP3() {
player = new BasicPlayer();
}
public void changeSong(song) {
// Change song now
String pathToMp3 = System.getProperty("user.dir") + this.getClass().getResource(song);
try {
player.open(new URL("file:///" + pathToMp3));
player.play();
logger.info("Playing the song: " + song);
} catch (MalformedURLException | BasicPlayerException e) {
logger.info("Could not turn on MP3 music from: " + pathToMp3);
}
}
}
我已经解决了 CSV 读取的类似问题。而不是从资源中读取。我将资源读取为流。
InputStream in = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
但这里的问题是
layer.open(new URL("file:///" + pathToMp3));
采用参数 URL,而不是流或字符串。你知道如何从可执行 JAR 文件中的资源文件夹流式传输 MP3:s 吗?
更新:
// Change song now
String pathToMp3 = getClass().getResource(song).toString();
InputStream in = getClass().getResourceAsStream(song);
try {
player.open(in);
player.play();
logger.info("Playing the song: " + song);
} catch (BasicPlayerException e) {
logger.info("Could not turn on MP3 music from: " + pathToMp3);
}
给出错误:
【问题讨论】:
-
既然
this.getClass().getResource(song);返回一个URL,你考虑过试试player.open(this.getClass().getResource(song))吗? -
另外,检查
song值,为简单起见,确保它是从包结构顶部到资源的绝对路径,即/resources/HappyHappJoyJoy.mp3 -
@MadProgrammer 它给出了和以前一样的错误。
-
另外,也许您应该尝试在 catch 块中打印堆栈跟踪。也许这可以更好地了解正在发生的事情!
e.printStackTrace(); -
请注意,这是在 Raspberry Pi 上。但是 Java 无处不在 ;)
标签: java jar stream mp3 executable-jar