簡體   English   中英

聲音不在罐子里播放

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM