簡體   English   中英

Java swing Image的高度和寬度始終為-1

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

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