Listar tabela do bd (mysql) em uma tabela java

Para começar, olá a todos!

sou iniciantes em java e em meus estudos me deparei com um certo problema a listar dados do db em uma tabela java.

meu codigo está assim:

Classe contato (id, nome, telefone, email);

ContatoDAO

package testandoclasses;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ContatoDAO {
private Connection con;
PreparedStatement stmt;
ResultSet rs;
public ContatoDAO(){
con = new FabricaDeConexoes().getConnection();
}

public ArrayList listarContatos() throws SQLException{
    String sql = "select * from contato";
    stmt = con.prepareStatement(sql);
    rs = stmt.executeQuery();
    
    ArrayList<Contato> contatos = new ArrayList<Contato>();
    
    if(rs.next()){
        Contato contato = new Contato();
        contato.setId(rs.getInt("id"));
        contato.setNome(rs.getString("nome"));
        contato.setTelefone(rs.getString("telefone"));
        contato.setEmail(rs.getString("email"));
        contatos.add(contato);
        
    }
    return contatos;
}

}

================================

e minha interface tem um metodo mostrarTabela
Construtor(
public ListarContatos() {
initComponents();
iniciarDB() ;
montarTabela();
}

private void iniciarDB() {
contatoDao = new ContatoDAO();
}

)

//omitidos

private ContatoDAO contatoDao;
private Contato contato;

private void montarTabela(){
    try {
        ArrayList<Contato> contatos = contatoDao.listarContatos();
        int linha = 0;
        for(Contato contato : contatos){
           int id =  contato.getId();
           String nome = contato.getNome();
           String telefone = contato.getTelefone();
           String email = contato.getEmail();
           
           tblContatos.getModel().setValueAt(id, linha, 0);
           tblContatos.getModel().setValueAt(nome, linha, 1);
           tblContatos.getModel().setValueAt(telefone, linha, 2);
           tblContatos.getModel().setValueAt(email, linha, 3);
           linha++;
        }          
        
    } catch (SQLException ex) {
        Logger.getLogger(ListarContatos.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

Não estou tendo muito problema para inserir , ou excluir no db, mas trazer para a tela…

com esse codigo está dando o erro

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at testandoclasses.ListarContatos.montarTabela(ListarContatos.java:155)
at testandoclasses.ListarContatos.(ListarContatos.java:24)
at testandoclasses.ListarContatos$2.run(ListarContatos.java:135)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

================================

então, o que mais preciso colocar nesse código, ou onde devo concertar, alguém pode ajudar?

já agradeço desde o começo…!

Acredito que falta você inserir uma linha na JTable para depois passar os valores para cada coluna da linha, procure sobre o JTable.addRow()

eu acho que vc não tem uma instancia do seu dao. ai o atributo esta nulo e se vc tentar chamar qq metodo isso vai explodir