/ / NullPointerException al intentar llamar al método de pintura - java, swing, nullpointerexception

NullPointerException al intentar llamar al método paint - java, swing, nullpointerexception

Estoy haciendo un juego y debería dibujar rectángulos,así que creé un método que dibuja rectángulos. Pero no quiero solo un rectángulo, sino muchos. Entonces, en un ciclo for, trato de llamar al método de pintura que creé. Y ahí es donde da un NullPointerException.

Método:

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);
}

Toda la clase:

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);
}

}

Respuestas

2 para la respuesta № 1

Y ahí es donde da una NullPointerException.

paint(null, i);

Bueno, por supuesto que obtienes un NPE. Se pasa nulo como parámetro al método.

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

Sin embargo, incluso si soluciona ese problema, eso esNO cómo haces pintura personalizada. NUNCA debe invocar el método paint () directamente. Swing invocará el método paint () cuando el componente necesite ser repintado.

Pero no quiero solo un rectángulo, sino muchos

Por lo tanto, debe agregar todo su código de pintura personalizado al paintComponent(...) método del JPanel. Luego, dentro de ese método, agregue su bucle for. Luego, solo usa el objeto Graphics pasado al método para hacer una pintura personalizada.

Lee la sección del tutorial de Swing en Pintura personalizada Para más información y ejemplos de trabajo.