[英]Java swing Image always has height and width of -1
我知道當它無法獲得圖像的寬度或高度時,該方法返回-1,但我希望你能告訴我為什么它無法做到這一點。 在這里,我創建了一些ImageIcons並將它們保存在Image Array中:
for(int x = 0; x < playerSprites.length; x++){
playerSprites [x] = new ImageIcon("player" + x + ".png").getImage()
}
稍后我創建了一個類的實例,該實例目前只創建這個數組。 當我想要從另一個類中的Array獲取圖像時,我檢查它們的高度和寬度,並且我總是得到-1:
public Image nextImage(String name){
Image image = null;
if(name.equals("player")){
if(counter == animationImageManager.getPlayerSprites().length-1){
counter = 0;
}
image = animationImageManager.getPlayerSprites()[counter];
counter++;
}
return image;
}
如果未找到圖像,則仍然會返回-1的高度和寬度。
請嘗試以下示例代碼重現此問題:
System.out.println(new ImageIcon("").getImage().getWidth(null)); // print -1
值得閱讀使用getResource加載圖像的 Java教程
可能是它沒有正確加載圖像。
您可以根據圖像位置嘗試任何一種。
// Read from same package
ImageIO.read(getClass().getResourceAsStream("c.png"));
// Read from images folder parallel to src in your project
ImageIO.read(new File("images/c.jpg"));
// Read from src/images folder
ImageIO.read(getClass().getResource("/images/c.png"))
// Read from src/images folder
ImageIO.read(getClass().getResourceAsStream("/images/c.png"))
如果圖像為空,Image的寬度/高度將返回-1。 什么時候沒有圖像。
建議:
使用ImageIO.read()
,如果IO出現問題,將拋出IOException
,如路徑錯誤。
如果圖像是應用程序的資源,則不要將其作為文件讀取,請通過URL將其作為資源讀取。 例如,如果圖像是src/images
,那么你可以這樣做
URL url = getClass().getResource("/images/myimage/png"); BufferedImage image = ImageIO.read(url);
ImageIcon
需要注意的重要事項是,當您將String傳遞給構造函數時,它將在本地文件系統中查找該文件。 它可能在您開發時有效,但是一旦您使用jar中的圖像部署應用程序,它將不再使用文件路徑,因為它將不再有效。 您可以將URL傳遞給ImageIcon,就像上面一樣,但就像我說的那樣,ImageIO允許更多的錯誤檢測。
只是讓您了解當前代碼中發生了什么,通過僅指定圖像文件名作為ImageIcon的路徑,搜索將在項目文件夾的根目錄中查找圖像(如果您在IDE中工作) )因為那是工作目錄。 因此,如果您的圖像不存在,則無法找到圖像。
關於我的第二個要點的另一個注意事項是如何搜索圖像。 你可以看到我使用的路徑"/images/myimage/png"
。 前面的/
是什么,將搜索帶到類路徑的根,在開發視圖中,它是src
。 調用類通常位於類路徑的某個包中,比如com.hello.somepackage.SomeClass
。 因此,如果SomeClass
嘗試在沒有/
情況下調用getclass getresource,則搜索將從類的位置開始,該類位於包中。
這只是使用資源/圖像時需要考慮的一些事項。 但是前幾點應該讓你前進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.