如何在jar文件中从mp3获取classpath

时间:2013-05-17 19:21:21

标签: 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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果文件在jar内,则无法使用new File("song.mp3");。该文件希望它位于正常的os路径内,而不是。

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

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

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

在静态方法中,你应该能够得到如下

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