Evento de clique do mouse

Olá, bom dia.

gostaria que você olhasse esse código pra mim e mim ajudasse, quando eu chamo o método chamado() pela primeira vez, o evento de clique do mouse funciona perfeitamente, mais quando chamo pela segunda vez (dentro da Thread) o evento do clique do mouse já não funciona mais. Gostaria de saber como resolver isso, se ao invés de zerar o modelo da tabela, tem como destruir ou resetar todo o modelo da tabela e a tabela.

import java.sql.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import java.text.SimpleDateFormat; public class Principal extends JFrame implements Runnable { private JMenuBar menu; private JMenu arquivo; private JMenuItem mCadastroUsuario, mStatus, mAlteraSenha, mSair; private JMenu listar; private JMenuItem mChamado; private JLabel lblTitulo; private DefaultTableModel dmChamado; private JTable tblChamado; private JScrollPane scrChamado; private JLabel lblObs; private Connection con; public Statement stm; public ResultSet rs; public String usuario; public Principal(String user) { usuario = user; this.getContentPane().setLayout(null); this.getContentPane().setBackground(new Color(0, 130, 180)); this.setSize(850, 600); this.setLocationRelativeTo(null); this.setTitle("Menu Principal - E-SAC"); menu = new JMenuBar(); this.setJMenuBar(menu); arquivo = new JMenu("Arquivo"); arquivo.setMnemonic(KeyEvent.VK_A); menu.add(arquivo); if (Integer.parseInt(usuario) == 1) { mCadastroUsuario = new JMenuItem("Cadastrar Usuário"); mCadastroUsuario.setMnemonic(KeyEvent.VK_C); arquivo.add(mCadastroUsuario); mCadastroUsuario.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { Usuario u = new Usuario(); u.setVisible(true); } }); mStatus = new JMenuItem("Status Usuário"); mStatus.setMnemonic(KeyEvent.VK_T); arquivo.add(mStatus); mStatus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { Status s = new Status(); s.setVisible(true); } }); } mAlteraSenha = new JMenuItem("Alterar Senha"); mAlteraSenha.setMnemonic(KeyEvent.VK_A); arquivo.add(mAlteraSenha); mAlteraSenha.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { Senha s = new Senha(usuario); s.setVisible(true); } }); arquivo.addSeparator(); mSair = new JMenuItem("Sair"); mSair.setMnemonic(KeyEvent.VK_S); arquivo.add(mSair); mSair.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { System.exit(0); } }); listar = new JMenu("Listar"); listar.setMnemonic(KeyEvent.VK_L); menu.add(listar); mChamado = new JMenuItem("Chamados"); mChamado.setMnemonic(KeyEvent.VK_C); listar.add(mChamado); mChamado.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { Listar l = new Listar(); l.setVisible(true); } }); if (Integer.parseInt(usuario) != 1) { lblTitulo=new JLabel("CHAMADOS"); lblTitulo.setBounds(new Rectangle(250, 40, 350, 40)); lblTitulo.setFont(new Font("Times New Roman", Font.BOLD, 52)); lblTitulo.setForeground(new Color(236, 240, 233)); this.getContentPane().add(lblTitulo); try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost/chamados", "sistemas", "doctum"); stm = con.createStatement(); } catch (Exception e) { } chamados(); lblObs=new JLabel("(Clique na coluna para Expandir)"); lblObs.setBounds(new Rectangle(310, 500, 350, 40)); lblObs.setFont(new Font("Times New Roman", Font.BOLD, 14)); lblObs.setForeground(new Color(236, 240, 233)); this.getContentPane().add(lblObs); } this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void run() { while (1 != 0) { try { Thread.sleep(3000); // Zerando o modelo da tabela dmChamado.setNumRows(0); chamados(); } catch (Exception e) { } } } public void chamados() { try { rs = stm.executeQuery("select m.data,p.protocolo,c.nome,p.tipo,p.motivo from chamado p,cliente c,mensagem m where c.codigo=p.cliente and p.protocolo=m.protocolo and p.status='Aberto' and p.usuario="+usuario+" group by p.protocolo"); rs.last(); int linha = rs.getRow(); rs.beforeFirst(); String[] coluna = {"DATA", "PROTOCOLO", "NOME", "TIPO", "MOTIVO"}; String[][] dados = new String[linha][5]; SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy"); linha = 0; while (rs.next()) { dados[linha][0] = formato.format(rs.getDate(1)); dados[linha][1] = rs.getString(2); dados[linha][2] = rs.getString(3); dados[linha][3] = rs.getString(4); dados[linha][4] = rs.getString(5); linha++; } dmChamado = new DefaultTableModel(dados, coluna); tblChamado = new JTable(dmChamado); tblChamado.getColumnModel().getColumn(0).setMaxWidth(80); tblChamado.getColumnModel().getColumn(1).setMaxWidth(90); tblChamado.getColumnModel().getColumn(2).setMaxWidth(220); tblChamado.getColumnModel().getColumn(3).setMaxWidth(80); tblChamado.getColumnModel().getColumn(4).setMaxWidth(330); tblChamado.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 1) { Point p = e.getPoint(); Chamado c = new Chamado(tblChamado.getValueAt(tblChamado.rowAtPoint(p), 1)); c.setVisible(true); setVisible(false); } } }); scrChamado = new JScrollPane(tblChamado); scrChamado.setBounds(new Rectangle(20, 100, 800, 400)); this.getContentPane().add(scrChamado, null); } catch (Exception e) { } } }

Ao invés de criar a Table várias vezes, crie uma só e use a opção:

Outra coisa, não use DefaultTableModel. É mais difícil, menos prático, duplica dados e tem menos segurança. No lugar, aprenda a fazer seu próprio TableModel.

ViniGodoy, fiz o que você me informou, mais mesmo desta forma o evento de clique do mouse continua não funcionando após ser chamado novamente pela Thread.