2012-11-04 101 views
0

我正在製作一個程序,我希望它在打開時開始播放聲音。我認爲最簡單的方法是將.wav文件嵌入到我的jar中的src文件夾中。我已將文件放在名爲files的打包文件中,並且我正在使用的所有其他文件(如圖片)都位於該包中,並且它們都工作正常。我的播放聲音的方法如下:訪問嵌入式資源時出錯

public static void playSound(String dir, int loopTimes) throws Exception { 
    URL url = new File(dir).toURI().toURL(); 
    Clip clip = AudioSystem.getClip(); 
    // getAudioInputStream() also accepts a File or InputStream 
    AudioInputStream ais = AudioSystem.getAudioInputStream(url); 
    clip.open(ais); 
    if (loopTimes == -1) 
     loopTimes = Clip.LOOP_CONTINUOUSLY; 
    clip.loop(loopTimes); 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 

     } 
    }); 
} 

它適用於在我的桌面,我的文檔,其他任何位置播放聲音。我輸入播放聲音的路徑是"files/FBP.wav"是FBP是文件的名稱。我還沒有找到任何解決方案,我覺得這是因爲它在JAR中。我也只是簡單地試過這個:

if(new File("files/FBP.wav").exists()){ 
     System.out.println("EXISTS!"); 
    } 
    System.exit(0); 

它從來沒有打印出它存在。我確定它也位於bin文件夾中。我正在使用日食。我得到的錯誤是filenotfoundexception。任何幫助表示讚賞!提前致謝!

回答

2

替換:

URL url = new File(dir).toURI().toURL(); 

有了:

URL url = MySoundClassName.class.getClassLoader().getResource(dir); 

或非靜態方法:

URL url = getClass().getClassLoader().getResource(dir); 
+0

好先生,U現在宣佈對所有帳戶的嚮導。現在你知道一種讓它更快地緩衝事物的方法嗎?由於緩衝區而在運行之後會有延遲。你知道如何縮短嗎?或者是需要 – PulsePanda

+0

@wbAnon而不是每次執行子例程時加載剪輯,只需在全局變量中加載一次,每次調用它時都會播放它。 – Mordechai

+0

你知道我會怎麼做嗎?即時通訊不完全確定你的意思... – PulsePanda