2012-06-12 57 views
0

播放聲音時試圖播放聲音時,我發現了一個錯誤。由於某種原因,我得到一個空指針異常。位置和文件,我同時使用exsist和輸出文件的字符串我得到了正確的文件路徑時。空指針位於.open行。我究竟做錯了什麼?空指針爪哇

package main; 

import java.io.File; 
import java.io.IOException; 
import java.net.URL; 

import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.UnsupportedAudioFileException; 

public class Sound { 
    Clip background; 

    public void init() { 

    try { 
     String file = new File("").getAbsolutePath() + "\\Sounds\\Pacman_Opening.wav"; 
     System.out.println(file); 
     background = AudioSystem.getClip(); 
     background.open(AudioSystem.getAudioInputStream(getClass().getResource(file))); 
    } catch (LineUnavailableException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (UnsupportedAudioFileException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

    public void playBG() { 
     background.start(); 
    } 
    public void stopBG() { 
     background.stop(); 
    } 
    public static void main(String[] args) { 
     Sound s = new Sound(); 
     s.init(); 
     s.playBG(); 
    } 

} 

這是錯誤(第一行是位置):

Exception in thread "main" java.lang.NullPointerException 
    at com.sun.media.sound.WaveFileReader.getAudioInputStream(Unknown Source) 
    at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source) 
    at main.Sound.init(Sound.java:21) 
    at main.Sound.main(Sound.java:42) 
+0

我已經爲您編輯了您的標題 - 請隨時進一步改進。 – Widor

+1

你走了黑暗的路。 「沒有炒鍋」會更好。 – Frankie

+0

@Widor我的不好,忘了更改標題,這只是一個臨時的標題,只是錯過改變它。多麼可怕的錯誤,感謝您修復它! – ComputerLocus

回答

4

Class.getResource()不採取 - 它需要一個資源名。

你爲什麼不只是創造一個File代替,並傳遞到getAudioInputStream

// TODO: Avoid backslashes in file constructor calls; there are other ways 
// of creating relative paths 
File file = new File("Sounds\\Pacman_Opening.wav"); 
... 
background.open(AudioSystem.getAudioInputStream(file)); 
+0

謝謝,似乎爲我工作。什麼時候最適合使用getAbsolutePath()? – ComputerLocus

+0

@Fogest:當你想爲某些原因的絕對路徑。如果*給File提供了一個相對路徑,它將創建一個相對於當前工作目錄的文件,這就是你想要的,看起來...... –