use super.paintComponent (g) o getGraphics () en java

Estoy un poco confundido acerca de algunas cosas:

Código de ejemplo, que muestra mi problema, esto no es compilable

// image
private BufferedImage image;
private Graphics2D graphic;
private changeImage;
. . .
//thread loop
while (running) {
   . . .
    render();
    Graphics showGraphic = getGraphics();
    showGraphic.drawImage(image, 0, 0, null);
    showGraphic.dispose();
    }
 public void render(){
     if(changeImage == 1)
     graphic.drawImage(ImageLoader.TREE, 0, 0, null);
     else if(changeImage == 2){
     graphic.drawImage(ImageLoader.HOUSE, 0, 0, null);
      . . .
     graphic.fillRect(50,60,30,40);
     }
}

Creo un objeto globalGraphic2D y dibujo cosas enrender()No llamorepaint() dentro del circuito del juego,¿Es una buena práctica hacer esto?

Debería usarrepaint() dentro de mi bucle, y elpaintComponent() función?

otra cosa, comographic.dispose() funciona correctamente? , porque al intentar eliminar esta línea de código, no sucede nada.

Entiendo cómo funciona dispose () según java docs, pero no he notado ninguna diferencia con dispose () o sin él.

mi programa funciona muy bien, pero tengo esta duda.

Respuestas a la pregunta(2)

Su respuesta a la pregunta