2012-12-31 44 views
-2

Possible Duplicate:
Cannot make a static reference to the non-static methodJava的:不能讓從類型組件

我想瓷磚背景的靜態引用非靜態方法的createImage(INT,INT),但現在我卡住了。我已閱讀createImage()的文檔,但出於某種原因,某些內容是靜態的,我無法弄清楚如何或爲什麼。

這裏是我的代碼:

Paint paint; 

    if (paint == null) { 
     try { 
      // Create TexturePaint instance the first time 
      Component c; 

      Image image = c.getToolkit().getImage("Background.png"); 

      int height = image.getHeight(null); 
      int width = image.getWidth(null); 

      BufferedImage bi = (BufferedImage) Component.createImage(width, height); 
      Graphics2D biG2d = (Graphics2D) bi.getGraphics(); 

      biG2d.drawImage(image, 0, 0, Color.black, null); 

      paint = new TexturePaint(bi, new Rectangle(0, 0, width, height)); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

我不能在互聯網上找到一個答案,所以我不知道發生了什麼錯誤。 :(

非常感謝您對我們的支持。

+0

http://stackoverflow.com/questions/4969171/cannot-make-a-static-reference-to-the-non-static-method – NominSim

+0

我只是要找到一種不同的方式來平鋪背景。這種方式是不可能的。 –

回答

2

看來的createImage不是一個靜態方法,所以在使用的類名,你不能直接訪問該方法。

createImage是實例方法,所以您需要實例Component並從實例調用createImage

例:

Component comp = new Component(..); 
comp.createImage(...); 
+0

那我該如何使用它? –

1

此行:

BufferedImage bi = (BufferedImage) Component.createImage(width, height); 

不正確。您正在對不存在的Component類進行靜態調用。不知道你要完成什麼,因爲你有一個Component實例聲明,但未初始化,在代碼中更高。如果你這樣做:

BufferedImage bi = (BufferedImage) c.createImage(width, height); 

你不會再得到編譯器的警告,但運行代碼將網你NPE。你可能想要更好地定義你想要完成的事情。

+0

但是,如果我刪除它,我得到這個錯誤:'方法createImage(INT,INT)是未定義的類型DisplayMap' –

+0

我不確定你的外部類是什麼,因爲你沒有發佈它的代碼示例。但是你必須對'Component'的一個正確初始化的子類進行'createImage'調用。在你的代碼中'c'變量初始化在哪裏? – Perception

0

試試這個,它調用的方法上Component實例:

BufferedImage bi = (BufferedImage) c.createImage(width, height); 
0

可能,而不是這一行

BufferedImage bi = (BufferedImage) Component.createImage(width, height); 

,你應該把你的組件對象,C,代替:

BufferedImage bi = (BufferedImage) c.createImage(width, height); 

但是,我沒有看到c將如何變成除當前代碼之外的其他任何東西。但也許這是一個獨立的問題,你將能夠解決你自己。

0

想必你要設置這個TexturePaint對象,你從Component獲得Graphics2D對象的Paint屬性。您將需要使用相同的組件創建您的BufferedImage