java - 如何从 jar 文件中的 mp3 获取类路径

标签 java jar mp3 classpath embedded-resource

我的 jar 文件中的类路径有问题。有图片
getClass().getResource("picture.png") 工作正常。但我需要获取 mp3 文件。
如果我将整个路径放在 jar 文件之外,它就可以正常工作,但是如果我尝试
而不使用像 getClass().getResource("picture.png") 这样的完整路径它说“找不到文件”。 因此,我正在寻找 Song.mp3 路径的解决方案,以便如果我构建 .jar 并在另一台计算机上打开它,歌曲仍然可以播放。

这是我的代码:

package bgmusic;

import java.io.*;

import javax.media.Format;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.PlugInManager;
import javax.media.format.AudioFormat;

public class Bgmusic {
    public static void main(String[] args) {
        Format input1 = new AudioFormat(AudioFormat.MPEGLAYER3);
        Format input2 = new AudioFormat(AudioFormat.MPEG);
        Format output = new AudioFormat(AudioFormat.LINEAR);
        PlugInManager.addPlugIn(
            "com.sun.media.codec.audio.mp3.JavaDecoder",
            new Format[]{input1, input2},
            new Format[]{output},
            PlugInManager.CODEC
        );
        try{
            Player player = Manager.createPlayer(new MediaLocator(new File("song.mp3").toURI().toURL()));
            player.start();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

最佳答案

如果该文件位于您的 jar 内,则无法使用 new File("song.mp3");。该文件期望它位于正常的操作系统路径内,但事实并非如此。

要从 jar 中获取文件,您需要使用 getResource

示例,假设 Song.mp3 位于 jar 文件的根目录中,而不是目录中:

URL url = this.getClass().getResource("song.mp3"); 

从静态方法中,您应该能够按如下方式获取它

URL url = BgMusic.class.getResource("song.mp3"); 

关于java - 如何从 jar 文件中的 mp3 获取类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16616413/

相关文章:

java - 有没有办法在java中将对象的值固定为常量?

java - 我的 Java 程序如何在其 .jar 文件中存储文件?

java - java eclipse 中的 mp3

python - 用于生成音频文件的好 python 库?

java - 如何在 Java 中计算分数方程的分数?

java - 编辑 JTable 后获取选定的行和列

java - 从 cmd 引用外部 jar 运行 jar 文件

C# TagLib 为 Mp3 设置专辑封面

java - 没有标题栏或关闭按钮的 JOptionPane 内部对话框?

java - 如何从 CMD 编译并运行包中的特定 .java 文件?