我正在制作游戏,它应该绘制矩形,所以我创建了一个绘制矩形的方法。但我不想只有一个矩形,但很多。所以在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);
}
}
答案 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教程中的部分,了解更多信息和工作示例。