2016-12-23 93 views
-3

我正在製作遊戲並且應繪製矩形,因此我創建了繪製矩形的方法。但我不想只有一個矩形,但很多。所以在for循環中,我嘗試調用我創建的paint方法。這就是它給出NullPointerException的地方。嘗試調用paint方法時出現NullPointerException

方法:

public void paint(Graphics g, int i) { 

    super.paint(g); 
    g.drawRect(i * 30, 0, 30, 30); 
} 

for-loop: 

for(int i = 0; i < (ScreenSize.screenwidth); i++) { 

      paint(null, i); 
} 

全班同學:

public class World extends JPanel { 

public void World() { 

    // Venster 
    JFrame World = new JFrame("World"); 
    World.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    World.setUndecorated(true); 
    World.setLayout(null); 

    // Objecten aanmaken 
    JPanel panel = new JPanel(); 

    // Objecten toevoegen 
    World.add(panel); 

    // Teken vierkantjes 
    for(int i = 0; i < (ScreenSize.screenwidth); i++) { 
     paint(null, i); 
    } 

    World.setVisible(true); 

    // Fullscreen, moet als laatste! 
    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(World); 
} 
// Functie om vierkantjes te tekenen 
public void paint(Graphics g, int i) { 
    super.paint(g); 
    g.drawRect(i * 30, 0, 30, 30); 
} 

} 
+1

可能重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix -it) – Frakcool

+1

我永遠無法理解爲什麼人們會連接到該帖子。它絕不會幫助解決繪製「許多矩形」的問題。 NPE是由於設計不佳和缺乏對Swing繪畫的理解所致。即使NPE解決了,OP也需要發佈另一個關於繪製多個矩形的問題。爲什麼不花時間看看真正的問題,而不是隻看單詞「NullPointerException」? – camickr

回答

2

而這正是它給出了一個NullPointerException異常。

paint(null, i); 

嗯,當然,你會得到一個NPE。您將null作爲參數傳遞給方法。

public void paint(Graphics g, int i) { 
    super.paint(g); 
    g.drawRect(i * 30, 0, 30, 30); 
} 

但是,即使你解決了這個問題,那不是你如何做自定義繪畫。你不應該直接調用paint()方法。當組件需要重新繪製時,Swing將調用paint()方法。

但我不想只是一個矩形,但許多

所以,你需要所有的繪圖代碼添加到JPanel的paintComponent(...)方法。然後在該方法中添加for循環。然後你只需使用傳遞給該方法的Graphics對象來進行自定義繪畫。

閱讀Swing教程中有關Custom Painting的部分以獲取更多信息和工作示例。

相關問題