尝试调用paint方法时出现NullPointerException

时间:2016-12-23 21:32:13

标签: java swing nullpointerexception

我正在制作游戏,它应该绘制矩形,所以我创建了一个绘制矩形的方法。但我不想只有一个矩形,但很多。所以在for循环中我尝试调用我创建的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 个答案:

答案 0 :(得分: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对象来自定义绘画。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。