詳解IDEA中類加載器調用getResourceAsStream()方法需註意的問題
當我們使用類加載器調用getResourceAsStream()時,經常會出現空指針異常,明明路徑名稱都沒有問題,為什麼就是報空指針異常呢?
查瞭一下getResourceAsStream()的用法:
1. Class.getResourceAsStream(String path) : path 不以’/’開頭時默認是從此類所在的包下取資源,以’/’開頭則是從ClassPath根下獲取。其隻是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源。
2. Class.getClassLoader.getResourceAsStream(String path) :默認則是從ClassPath根下獲取,path不能以’/’開頭,最終是由ClassLoader獲取資源。
然而,對於這個解釋,說實話,不是很明白,對我的幫助不是很大,後面我在別人的博客方法的基礎上,瞎搞瞭幾下,終於,我的背景音樂響起來瞭,不容易啊
以下是在b站上學的一段完整代碼,很簡單的一個功能,就是一直循環播放背景音樂,而這段代碼最容易出錯的地方,我覺得就是這個getResourceAsStream()方法瞭
import javax.sound.sampled.*; import java.io.IOException; import java.io.InputStream; public class Test_2 { public static void main(String[] args) throws LineUnavailableException, IOException, UnsupportedAudioFileException { Clip bgm = AudioSystem.getClip(); InputStream is = Test_2.class.getClassLoader().getResourceAsStream("music/bgm.wav"); System.out.println(is); AudioInputStream ais = AudioSystem.getAudioInputStream(is); bgm.open(ais); bgm.loop(Clip.LOOP_CONTINUOUSLY); while (true){ } } }
如果大傢存放資源的文件夾,是一個普通文件夾的話,即如圖所示:
則上面getResourceAsStream()方法必然會報空指針異常,具體原因我也不是很明白,而要解決異常,就要將該文件夾設置為可以存放源代碼的文件夾,也即eclipse中的Source Folder,而我這裡是idea,沒有這個選項,所以需手動設置,我的方法是:
1,選中並右鍵單擊File ==> Project Structure…
以下是打開的界面:
2, 如下圖所示
①選中存放資源的文件夾,我這裡是 resource(名稱可自定義)
②選中 Mark as: 這一欄的 Sources
③點擊apply
④點擊ok
最後resource文件夾會變為藍色(resource目錄此時就相當於另一個src目錄),music文件夾變為package ,說明修改成功
此時再運行,動聽的音樂總算是出來瞭
到此這篇關於詳解IDEA中類加載器調用getResourceAsStream()方法需註意的問題的文章就介紹到這瞭,更多相關IDEA類加載器調用getResourceAsStream內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- JAVA 筆記 ClassLoader.getResourceAsStream() 與 Class.getResourceAsStream()的區別
- Java代碼讀取文件緩存問題解決
- 詳解Spring boot操作文件的多種方式
- SpringBoot 如何讀取classpath下的文件
- SpringBoot讀取Resource下文件的4種方法