2015-02-11 87 views
1

我正在嘗試以下代碼來播放mp3。該文件位於正確的文件夾中。打開文件時引發異常。audioInputStream的url似乎爲空

任何想法可能是錯的?

當試圖在第三行打印url時,它給了我一個空指針異常。

我正在編譯1.8到1.6的最低版本。這可能是相關的嗎?

AudioInputStream audioIn = null; 
    URL url = this.getClass().getResource("./data/1.wav"); 
    System.out.print(url.getFile()); 

    try { 
     audioIn = AudioSystem.getAudioInputStream(url); 
     //audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResource(soundFile)); 

    } 
    catch(Exception ex) {System.out.print("exception opening file");} 
    try{ 
     Clip clip = AudioSystem.getClip(); 
     clip.open(audioIn); 
     clip.start(); 
    } 
    catch(Exception ex) 
    { 

     System.out.print("exception mediaplayer"); 
    } 
    } 

回答

0

哦,我不得不把數據文件夾放在src目錄中。

儘管如此:當我編譯爲jar文件時,它沒有找到數據文件夾。我希望用戶能夠在其中放置不同的東西。

+0

只是要清楚。我希望用戶能夠手動處理src中的文件,「jar」的「外部」。 – dorien 2015-02-13 12:45:00

0

而不是使用String var,可以使用Clip對象。隨着剪輯,它爲我工作。

+0

我正在使用剪輯,不是?你到底什麼意思? – dorien 2015-02-11 15:37:16

0

與文件地址不同,URL可以看到Jar。所以,你應該沒問題使用URL來獲取文件。

兩個可能的問題:

(1)如果文件是.MP3,你要加載一個.wav,也當然會是一個錯配1.MP3 <> 1.wav。

(2)將數據放入src文件夾是不夠的。它也必須位於包含您引用的「this」的文件夾的子文件夾中。例如,如果您的代碼位於「foo」包中,則放置該文件的位置將爲src/foo/data/1.wav。

您是否有庫來解碼.mp3?如果是這樣,JavaZoom應該可以工作。

+0

但我想要在jar外面的mp3文件,所以用戶可以改變它。由於我正在處理大量的mp3文件,因此能夠將這麼大的一個jar文件發送回用戶是一件好事。 – dorien 2015-02-13 12:44:26

+0

如果文件位於jar外部,並且您想通過相對地址訪問該文件,則必須使用「..」的某些組合來提升父級文件夾的級別,或者使用絕對地址。如果您沒有對文件進行硬編碼(事先不知道),那麼JFileChooser可能會有所幫助。 – 2015-02-13 17:31:44

+0

我從來沒有得到那個工作。我讀到安全性,java不允許這樣做。 – dorien 2015-02-19 14:35:54