2012-01-07 54 views
2

爲什麼會這樣:圖像的getWidth和getHeight返回-1不當

URL url = MinecraftPlatformGame.class.getResource("images/diamondPick.png"); 
image = Toolkit.getDefaultToolkit().getImage(url); 
int width = image.getWidth(null); 
int height = image.getHeight(null); 
System.out.println(width); 
System.out.println(height); 

返回-1同時爲widthheight

編輯:我的問題之前,我想出答案竟是我是怎麼了應該修復它。 我固定它通過執行以下操作:

URL url = MinecraftPlatformGame.class.getResource("images/diamondPick.png"); 
image = Toolkit.getDefaultToolkit().getImage(url); 
MediaTracker mTracker = new MediaTracker(this); 
    mTracker.addImage(image,1); 
     try { 
      mTracker.waitForID(1); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(MinecraftPlatformGame.class.getName()).log(Level.SEVERE, null, ex); 
     } 
int width = image.getWidth(null); 
int height = image.getHeight(null); 
System.out.println(width); 
System.out.println(height); 

url = MinecraftPlatformGame.class.getResource("images/gui.png"); 
image1 = Toolkit.getDefaultToolkit().getImage(url); 
    mTracker.addImage(image1,2); 
     try { 
      mTracker.waitForID(2); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(MinecraftPlatformGame.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     width = image1.getWidth(null); 
height = image1.getHeight(null); 
System.out.println(width); 
System.out.println(height); 

問題我現在已經是這似乎不是很有效,也不看起來像我應該需要這麼多的代碼只是爲了兩個圖像導入並給予大小。有沒有更好的更有效和更簡單的方法來做到這一點?

回答

4

每的Javadoc:

如果寬度還不知道,此方法返回-1和 指定ImageObserver對象後通知。

爲了響應您的編輯以及遵循Russell的評論,請使用ImageIO.read()來代替完全加載的圖像。

+4

一種替代方法是ImageIO.read(),它總是返回一個完全加載的圖像。 – 2012-01-07 01:15:29

+0

好吧,我更新了我與現在返回正確的寬度和hegiht但似乎inefficent考慮只對兩個圖像仍然會有很多更多媒體跟蹤問題。我假設有一種更好的方式來將照片作爲資源導入,並以更好的方式獲得寬度和高度。 @RussellZahniser – ComputerLocus 2012-01-07 01:17:50

+1

所有你需要的是'image = ImageIO.read(url)'。然後'image.getWidth()'從一開始就是正確的,不需要MediaTracker。 – 2012-01-07 01:22:52

相關問題