[英]sound not playing in jar
我將所有的類文件和資源打包為jar,但是在執行時,聲音文件不會播放。 我的包裹結構是:
+project
|_classes
|_ _*.class
|_resources
|_ _ *.jpg,*.wav
碼:
AudioInputStream inputStream = AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("../resources/"+file));
執行此行時得到null
!
替代已經提出的理論。 成功的getResource()調用通常取決於被調用以定位它們的類加載器實例。 因此,我建議使用用戶定義對象的實例,從該實例調用getResource()。 例如
// Sanity check
System.out.println("The value of 'file' is: " + file);
// Presuming kidsClassRoom1 is an instance of kidsClassRoom
AudioInputStream inputStream = AudioSystem.
getAudioInputStream(
kidsClassRoom1.
getClass().
getResourceAsStream("/resources/"+file));
您可能還注意到,代碼段對資源使用前綴“ /”。 與其他人的說法相反,我相信這意味着在運行時類路徑上找到的任何Jar中,從資源路徑的“根源”開始。 省略“ /”或“ ../”將使類加載器在發生這種情況的類的子路徑中搜索資源。
當然-確保Wav最終進入罐子! 將.jar復制/重命名為.zip,然后雙擊它是在Windows上檢查存檔內容的“快速而骯臟的”方法。
這是我在jar中播放循環聲音文件的功能,對我來說很好用。
似乎getResourceAsStream()
無法與jar一起使用。 但是, getResource()
可以。
public synchronized void alarm() {
try {
crit = AudioSystem.getClip();
AudioInputStream inputStream1 = AudioSystem.getAudioInputStream(this.getClass().getResource("critical.wav"));
crit.open(inputStream1);
crit.loop(Clip.LOOP_CONTINUOUSLY);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
創建一個名為resources
的程序包,如下所示
然后
AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("resources/"+file));
需要注意的重要一點是,在導出的jar中,資源未存儲為文件(在某處閱讀此內容,請有知識的人輸入)。 因此,最好首先將資源作為URL對象獲取,然后將其傳遞給AudioInputStream對象。
URL url = YourClass.class.getResource(filename);
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
如果資源在子文件夾中,請記住將其添加到文件名路徑。
當您執行getResourceAsStream
,它不是相對於當前類,而是相對於存檔的根。 也就是說,首先嘗試刪除../
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.