2015-08-16 135 views
0

我有一個問題,我希望你能幫助我。 有些人說我在做什麼,所以你知道發生了什麼事情:所以目前我正在試圖編寫一個軟件,它可以播放一些音樂文件(mp3文件是確切的,所以我使用jLayer API)。我正在與Netbeans合作,並且我已經成功地在該項目中導入了一個音樂文件。如果我構建我的程序並用存檔程序打開生成的JAR文件,我可以在其中找到我的音樂文件。我的功能我使用的是這樣的:聲音無法播放JAR文件

public static String play(String file) { 
    File test = new File(file); 
    try { 
     FileInputStream in = new FileInputStream(test); 
     Player pl = new Player(in); 
     pl.play(); 
     return "success"; 
    } 
    catch (Exception e) { 
     return e.toString(); 
    } 

} 

正如你可以看到我得到的路徑名稱的字符串和重構他,所以我可以播放文件。我打電話的功能,用下面的代碼(音樂文件被保存在ressources包):

MP3.play(getClass().getResource("/ressources/angel.mp3").getPath()) 

所以,如果我開始通過Netbeans的一切PROGRAMM工作完全正常。但是,如果我創建一個JAR文件並啓動程序,則什麼也不會發生。唯一的例外是得到下列:

java.io.FileNotFoundException: file:\C:\Users\Raphael\Documents\NetBeansProjects\MP3\dist\MP3.jar!\ressources\angel.mp3 

它說文件不存在,但如果我檢查我的JAR文件是存在的......

我發現了另一個奇怪的是以下:如果我使用下面的函數來播放音樂文件:

public static String play(InputStream test) { 
    try { 
     Player pl = new Player(test); 
     pl.play(); 
     return "success"; 
    } 
    catch (Exception e) { 
     return e.toString(); 
    } 

} 

並調用該函數具有以下參數:

MP3.play(getClass().getResourceAsStream("/ressources/angel.mp3")); 

在Netbeans和最終的JAR中,一切正常。任何人都可以解釋我做錯了什麼,只有第二個函數可以在JAR版本中使用嗎?

如果你能在這件事情上幫助我,這將是非常好的。

問候, xXKnightRiderXx

+0

我看到一個'MP3.jar!'在FileNotFoundExcep灰。文件的實際名稱是什麼? –

+1

資源不是文件,不適用於FileInputStream或大多數文件相關的API。從jar中提取資源,然後在單獨的文件上使用FileInputStream,或者直接直接使用getResourceAsStream()。 – WillShackleford

+0

@ILikeTau是啊你是對的有一個「!」在文件名中,這不是文件的實際名稱。但我已經嘗試刪除「!」在我進一步使用字符串之前,但這並沒有解決我的問題。 – xXKnightRiderXx

回答

0

我假設你有2包1爲src在您的.java文件所在等是你的聲音文件位於

所以資源我建議你使用

MP3.play(getClass().getResourceAsStream("/angel.mp3")); 

由於佔用資源()自動查找資源包