2013-05-17 126 views
0

我在jar文件中的classpath中遇到問題。有圖片
getClass().getResource("picture.png")工作正常。但我需要得到一個mp3文件。
如果我把整個路徑放在jar文件的外面,它工作得很好,但是如果我嘗試它
沒有像getClass().getResource("picture.png")這樣的完整路徑,它會顯示「找不到文件」。 因此,我正在尋找song.mp3路徑的解決方案,以便如果構建.jar並在另一臺計算機上打開它,該歌曲仍會播放。如何從jar文件中獲取mp3的類路徑

這是我的代碼:

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

如果該文件是你的罐子裏面,你不能使用new File("song.mp3");。該文件希望它在你的普通os路徑內,而不是。

要獲得文件從罐子中,您需要使用getResource

例子,假設Song.mp3的是在你的JAR文件的根,而不是在一個目錄:

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

從內靜態方法,你應該能夠得到它如下

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

當我嘗試,我似乎得到一個錯誤預期 如果我嘗試 InputStream是; is = this.getClass()。getResourceAsStream。(「/ song.mp3」); 我怎麼把它放在播放器中? – Henk

+0

道歉,你應該在這種情況下使用getResource而不是getResourceAsStream。 getResource返回一個可直接與MediaLocator一起使用的URL – greedybuddha

+0

Im獲取非靜態變量現在不能從靜態上下文中引用: InputStream is; is = this.getClass()。getResource(「/ song.mp3」); – Henk