[英]Why is my BufferedImage receiving a null value from ImageIO.read()
BufferedImage = ImageIO.read(getClass().getResourceAsStream("/Images/player.gif"));
首先,是的,我確實將圖像文件夾添加到了我的類路徑中。
為此,我收到錯誤java.lang.IllegalArgumentException: input == null!
我不明白為什么上面的代碼不起作用。 從我讀到的一切,我不明白為什么它不會。 我被告知我應該使用FileInputStream
而不是GetResourceAsStream
,但正如我剛才所說,我不明白為什么。 我已經閱讀了有關方法和各種指南的文檔,這似乎可行。
編輯:好的,嘗試清除一些關於我在類路徑中的內容。
這是在Eclipse中創建的項目。 一切都在項目文件夾DreamGame
,包括“Images”文件夾。 當然, DreamGame
是在類路徑中。 我知道這是有效的,因為我正在使用代碼中前面提供的gif信息讀取/Images
的文本文件。
所以我有: /DreamGame/Images/player.gif
編輯2:當前在原始帖子中的行是所有正在傳遞的行; 沒有/DreamGame/Images/player.gif
,只是/Images/player.gif
。 這是來自ImagesLoader
類中的方法,該方法在創建PlayerSprite
的對象時調用。 主要類是DreamGame
。 我正在使用Run
選項直接從Eclipse運行代碼而沒有特殊參數
試圖弄清楚如何找到正在加載類的類加載器。 對不起,與大多數人相比,我對此非常陌生。
好的,這就是getClassLoader()
給我的東西: sun.misc.Launcher$AppClassLoader@4ba778
getClass().getResource(getClass().getName() + ".class")
/home/gixugif/Documents/projects/DreamGame/bin/ImagesLoader.class
getClass().getResource(getClass().getName() + ".class")
返回/home/gixugif/Documents/projects/DreamGame/bin/ImagesLoader.class
圖像文件也被放入bin
中。 要仔細檢查,我從bin
刪除了文件,清理了項目並運行它。 仍然有同樣的問題,圖像文件回到bin
基本上, Class.getResourceAsStream
不會按照您的想法執行。
它試圖獲取相對於該類的類加載器的資源 - 所以除非你有一個以你的文件系統根目錄作為其根目錄的類加載器,否則它將找不到你所追求的文件。
聽起來你應該真的有這樣的東西:
BufferedImage = ImageIO.read(getClass().getResourceAsStream("/Images/player.gif"))
(編輯:顯示的原始代碼不同,並具有完整的文件系統路徑。)
並確保將圖像復制到當前類的類加載器的適當位置以獲取Images
目錄。 當你將它打包到一個jar文件中時,你也想要那里的Images
目錄。
編輯:這個位可能是問題:
首先,是的,我確實將圖像文件夾添加到了我的類路徑中。
images文件夾不應該在類路徑中 - Images文件夾的父級應該是,因此當類加載器查找 Images
目錄時,它將在其根目錄下找到它。
如果使用resourceAsStream“/”引用類路徑條目的根,而不是文件系統的根。 看看你正在使用的路徑可能就是原因。
如果你從某個主路徑加載某些東西,你可能應該使用FileInputStream。 getResourceAsStream用於您使用應用程序部署的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.