Imagem não imprime em jPanel

Não estou conseguindo imprimira uma imagem em um jPanel, quero imprimir uma imagem de uma nave a partir de uma classe Nave.java.

Código da classe:

import java.awt.;
import javax.swing.
;
import java.awt.event.*;

public class Nave extends Thread {

private int x;
private int y;
private Graphics gr;
private final Image img = new ImageIcon(getClass().getResource("nave500x500.png")).getImage();
private int tamI = 150;
public int getX() {
    return x;
}
private int PontosVida = 3;
public Nave(Graphics g) {
    this.gr = g;
    x = TesteMovimentação.larguraJanela / 2;
    y = TesteMovimentação.alturaJanela / 2;
}
public void desenhaNave() {
    gr.drawImage(img, x, y, x + tamI, y + tamI, 0, 0, 500, 500, null);
}
@Override
public void run() {
    System.out.println(y);
}

}

Por enquanto não quero jogar ele no run(), só estou testando.

Código que escrevi no jFrame:

import java.awt.Dimension;

public class TesteMovimentação extends javax.swing.JFrame {

public static int alturaJanela;
public static int larguraJanela;

public TesteMovimentação() {
    initComponents();
   
    Dimension dim = jPanel1.getSize();
    alturaJanela = dim.height;
    larguraJanela = dim.width;
    
    Nave n1 = new Nave(jPanel1.getGraphics());       
    //n1.start();
    n1.desenhaNave();
}

Quando inicio simplesmente fica em branco. Alguém poderia me ajudar?

Falta usar o método paintComponent do painel, nesse seu código vc só chama a imagem, não desenha ele.

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(bgImage, 0, 0, null);
}

Onde eu colocaria esse método?

@thiago_dutra

Na classe que estende do painel. Faça o seguinte:

1- Crie uma classe com “extends JPanel”;
2 - Coloque o método paintComponent ali na classe com o @Override;
3 - Declare seu painel com essa classe;