Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Bom dia pessoal, não queria mais criar tópicos, depois que os códigos do meu projeto foram aumentando e acaba se tornando cansativo ler o código , mas depois de 24 horas tentando, desisto!!!
to conseguindo cadastrar, pesquisar, recuperar, mas na hora de remover um cadastro, vem o bendito erro…
[color=red]Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at Interfaces.frmCadastroMecanico.ExcluirMecanico(frmCadastroMecanico.java:235)
at Interfaces.frmCadastroMecanico.jbExcluirClienteActionPerformed(frmCadastroMecanico.java:224)
at Interfaces.frmCadastroMecanico.access$100(frmCadastroMecanico.java:25)
at Interfaces.frmCadastroMecanico$2.actionPerformed(frmCadastroMecanico.java:101)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
[/color]
O .frmCadastroMecanico.jbExcluirClienteActionPerformed(frmCadastroMecanico.java:224) aponta para a linha 14 do seguinte código…
dao.remove(pm.ListaMecanico.get(pm.jtTabela.getSelectedRow()));

[code]
private void jbExcluirClienteActionPerformed(java.awt.event.ActionEvent evt) {
try {
ExcluirMecanico(); // TODO add your handling code here:
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, “Erro no botão excluir”+ex);
}
}
public void ExcluirMecanico() throws SQLException {
PesquisaMecanico pm = new PesquisaMecanico();
int resp = JOptionPane.showConfirmDialog(this, “Deseja realmente excluir este Mecânico?”, “Confirmação”, JOptionPane.YES_NO_OPTION);
if (resp == JOptionPane.YES_NO_OPTION) {
Mecanico dao = new Mecanico();

        dao.remove(pm.ListaMecanico.get(pm.jtTabela.getSelectedRow()));
        pm.mostraPesquisa(pm.ListaMecanico);

    }
}[/code]

O código do form pesquisa mecanico(o qual recupera os dados para este formulario é o seguinte:

public class PesquisaMecanico extends javax.swing.JFrame {

    DefaultTableModel tmMecanico = new DefaultTableModel(null, new String[]{"Código", "Nome", "Telefone", "CPF"});
   public List<BeanMecanico> ListaMecanico;
    ListSelectionModel lsmMecanico;

    /** Creates new form PesquisaMecanico */
    public PesquisaMecanico() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    
    public void mostraPesquisa(List<BeanMecanico> listaMecanico) {
       if (tmMecanico == null){
           JOptionPane.showMessageDialog(this, "lista vazia");
       }else{
        while(tmMecanico.getRowCount() > 0){
            tmMecanico.removeRow(0);
        }
        if (listaMecanico.size() < 0) {
           JOptionPane.showMessageDialog(null, "Nenhum mecânico no cadastro");
       } else {
        
            String[] linha = new String[]{null, null, null, null};
            for (int i = 0; i < listaMecanico.size(); i++) {
                tmMecanico.addRow(linha);
                tmMecanico.setValueAt(listaMecanico.get(i).getCodMecanico(), i, 0);
                tmMecanico.setValueAt(listaMecanico.get(i).getNomeMecanico(), i, 1);
                tmMecanico.setValueAt(listaMecanico.get(i).getFoneMecanico(), i, 2);
                tmMecanico.setValueAt(listaMecanico.get(i).getCPFMecanico(), i, 3);
            
            }
        }
}
    }
    public void jtTabelaLinhasSelecionadas(JTable tabela){
 frmCadastroMecanico fm = new frmCadastroMecanico();
        if(jtTabela.getSelectedRow() != -1){
fm.jtCodMecanico.setText(ListaMecanico.get(tabela.getSelectedRow()).getCodMecanico());
fm.jtNomeMecanico.setText(ListaMecanico.get(tabela.getSelectedRow()).getNomeMecanico());
fm.jfFoneMecanico.setText(ListaMecanico.get(tabela.getSelectedRow()).getFoneMecanico());
fm.jfCPFMecanico.setText(ListaMecanico.get(tabela.getSelectedRow()).getCPFMecanico());
fm.setVisible(true);
this.setVisible(false);
}else{
            fm.jtCodMecanico.setText("");
            fm.jtNomeMecanico.setText("");
            fm.jfFoneMecanico.setText("");
            fm.jfCPFMecanico.setText("");

}
}
}

Alguém pode me ajudar de alguma maneira?
Obrigado…