java - 如何播放Jar文件中resources文件夹中的MP3文件?

标签 java jar stream mp3 executable-jar

我正在尝试访问位于 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);
        }

    }

}

pathToMp3 看起来像这样: enter image description here

我已经解决了 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);
        }

给出错误:

enter image description here

最佳答案

我从 here 复制了 BasicPlayerTest 示例并修改了播放方法以获取 URL

然后运行项目中的主要工作并导出到 jar 中。

请注意,我将 resources 文件夹复制到了 src 文件夹内。

public static void main(String[] args) {
    BasicPlayerTest test = new BasicPlayerTest();
    test.play(test.getClass().getResource("/resources/test.mp3")); 
}

我在日志中看到的网址是:
jar:file:/C:/Temp/mp3.jar!/resources/test.mp3

关于java - 如何播放Jar文件中resources文件夹中的MP3文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59415828/

相关文章:

Java 编译时出现一般错误 : "type argument is not within bounds of type-variable T"

java - 单页应用程序: page reload

Java.util.timer循环,程序卡住(无限循环?)

java - 使用外部库创建 Jar(Intellij Idea 2017)

java - 如何将文件添加到 jars META-INF

java - 在 jdk 9 中打包为 jar 时出现没有 module-info.class 错误的 --module-version 或 --hash-dependencies 之一

javascript - 获取流的内容长度

docker - 如何通过 Go SDK 流式传输 Docker 容器日志

java - 从 main() 终止 Runnable() 对象

java - Android ActionBar - 项目图标不断变化?