簡體   English   中英

為什么我的BufferedImage從ImageIO.read()接收空值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM