2013-10-20 24 views
2

我正在嘗試使用getImage()在我正在編寫的應用程序中在JPanel上顯示圖像。我已經試過並試圖讓它爲我工作,並最終發現,即使路徑完全不正確,它仍然不起作用,也不會像預期的那樣返回NullPointerException爲什麼getImage()返回錯誤或顯示圖像?

Image i;  

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    Graphics2D g2d = (Graphics2D)g; 
    g2d.drawImage(i, 0, 0, 200, 200, this); 
} // end paintComponent(); 

public Pnl() { 
    super(); 
    setBackground(Color.GREEN); 
    setBorder(BorderFactory.createLineBorder(Color.GRAY, 10)); 
    i = Toolkit.getDefaultToolkit().getImage("shrek.jpg"); 
} // end constructor  

當我運行參數的代碼,如getImage()「怪物史萊克...... jdhhd」或諸如此類的東西,它完全一樣的東西。

+0

爲什麼你會期望上面的代碼拋出NPE?上面的代碼中沒有任何內容應該這樣做。你測試過你的圖像實際上是否爲空?我將使用'ImageIO.read(...)'來獲取圖像,並將其作爲資源而不是文件。在使用之前我會檢查null。 –

+0

這是你的全部代碼嗎?你甚至從來沒有將圖像繪製到屏幕上。 –

+0

同樣,新代碼中沒有任何內容會拋出NPE。再次測試圖像是否爲空。您可以使用println語句來幫助您進行調試。再次使用'ImageIO.read(...)'。再次,獲取圖像作爲資源,而不是文件。我覺得你好像忽略了我的建議。 –

回答

2

有幾種不同的方式可以讀取圖像。

  1. 通過使用ImageIcon,然後從中提取Image
  2. 使用ImageIO

我懷疑一個問題,您的圖像的路徑。試試這個:

Path imgPath = Paths.get("/path/to/image.png"); 
if(Files.exists(imgPath)){ 
    // do whatever 
} else{ 

    // incorrect path 
} 

如果Path確實存在:

ImageIcon imageAsIcon = new ImageIcon(imgPath.getAbsolutePath()); 
Image imageOfIcon = imageAsIcon.getImage(); 

現在,你可以檢索其Graphics對象,做任何 如可能將其轉換成BufferedImage

您可能還嘗試使用ImageIO,如下所示:

BufferedImage img; 

try { 
    URL url = new URL(new File("/path/to/image.png"); 
    img = ImageIO.read(url); 
} catch (IOException e) { 
} 
3

我想使用的getImage()做一個

顯示圖像在您發表問題張貼適當SSCCE如果你想幫助,否則我們花時間猜測。

例如,也許正在正確讀取圖像,但問題是您的面板的大小是(0,0),所以沒有什麼可以繪製。

您還應該覆蓋getPreferredSize()方法以返回尺寸(200,200),因爲這是您想要繪製圖像的尺寸。

如果沒有顯示此面板使用方式的SSCCE,我們只是猜測。

相關問題