Java 尝试调用绘制方法时出现NullPointerException

Java 尝试调用绘制方法时出现NullPointerException,java,swing,nullpointerexception,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

我正在做一个游戏,它应该画矩形,所以我创建了一个画矩形的方法。但我不想要一个长方形,而是很多。所以在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);
}

}
这就是它给出NullPointerException的地方

当然,你会得到NPE。将null作为参数传递给方法

public void paint(Graphics g, int i) {
    super.paint(g);
    g.drawRect(i * 30, 0, 30, 30);
}
然而,即使你解决了这个问题,那也不是你定制绘画的方式。永远不要直接调用paint方法。当组件需要重新绘制时,Swing将调用paint方法

但我不想要一个长方形,而是很多

因此,您需要将所有自定义绘制代码添加到paintComponent。。。JPanel的方法。然后在该方法中添加for循环。然后,您只需使用传递给该方法的图形对象进行自定义绘制


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

可能重复的内容我永远无法理解为什么人们一直链接到该帖子。这绝对无助于解决绘制许多矩形的问题。NPE是设计拙劣和缺乏对Swing中绘画如何工作的理解的结果。即使NPE得到解决,OP也需要发布另一个关于绘制多个矩形的问题。为什么不花点时间看看真正的问题,而不仅仅是看NullPointerException这个词呢?
public void paint(Graphics g, int i) {
    super.paint(g);
    g.drawRect(i * 30, 0, 30, 30);
}