use super.paintComponent (g) ou getGraphics () em java

estou um pouco confuso sobre algumas coisas:

Código de exemplo, que mostra o meu problema, isso não é compilável

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

Eu crio um objeto globalGraphic2D e eu desenho coisasrender()Eu não ligorepaint() dentro do loop do jogo,é uma boa prática fazer isso?

Devo usarrepaint() dentro do meu loop, e opaintComponent() função?

outra coisa, comographic.dispose() funciona corretamente? , porque, ao tentar remover esta linha de código, nada acontece.

Entendo como funciona o dispose () de acordo com o java docs, mas eu não notei nenhuma diferença com dispose () ou sem.

meu programa roda muito bem, mas tenho essas dublagens.

questionAnswers(2)

yourAnswerToTheQuestion