Erro em método de exclusão pessoal!

Opa!!!
Beleza amigão!!
Segue o código da minha DAOCLientePSQL :

package dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.JOptionPane;

import modelo.Cliente;
import visao.TelaCadCliente;
public class DAOClientePSQL implements DAOCliente { 

	//private TelaCadCliente cliente = new TelaCadCliente();
	
	private PreparedStatement sql = null; 
	private ResultSet r = null;
	
	
public void cadastrar (Cliente c){
		
		try {
			
			sql=DAOFactoryPSQL.getConnection().prepareStatement("insert into cliente values (?,?,?,?,?,?,?,?,?,?,?)");
			
			sql.setString(1 , c.getNome());
			sql.setString(2 , c.getEndereco());
			sql.setString(3 , c.getTel());
			sql.setString(4 , c.getTelTrabalho());
			sql.setString(5 , c.getTelCel());
			sql.setString(6 , c.getCpf());
			sql.setString(7 , c.getNumero());
			sql.setString(8 , c.getCep());
			sql.setString(9 , c.getIdentidade());
			sql.setString(10 ,c.getBairro());
			sql.setString(11 , c.getCodigo());
			
			
			
			//executa o sql
			sql.executeUpdate();
			
		}
		
		catch (Exception e){
			JOptionPane.showMessageDialog(null,"Erro durante o cadastro do cliente : "+e,"ERRO",JOptionPane.ERROR_MESSAGE);
		}
	
	}
	
	public void excluir (Cliente c){
		
		try {
			
			//cria o sql
			sql = DAOFactoryPSQL.getConnection().prepareStatement("delete from cliente where codigo = ?");
			sql.setString(1,c.getCodigo());
			sql.executeUpdate();		
		}
	
		catch (Exception e) {
			JOptionPane.showMessageDialog(null,"Erro durante o acesso ao Banco para a exclusão do cliente!","ERRO",JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public void alterar (Cliente c){
		
		try {
			
			sql = DAOFactoryPSQL.getConnection().prepareStatement("update cliente set nome=?, endereco=?,tel=?,telTrabalho=?,telCel=?,cpf=?,numero=?,cep=?,identidade=?,bairro=? where codigo =?");
			sql.setString(1, c.getCodigo());
			
			
			
			sql.executeUpdate();
			
		}
		catch (SQLException e){
			JOptionPane.showMessageDialog(null,"Erro de SQL:"+e.getMessage());
		}   catch (Exception e){
			JOptionPane.showMessageDialog(null,"erro de alteracao");
		}
	}
	
	public Cliente consultar (Cliente c){
		
		try {
			
			sql = DAOFactoryPSQL.getConnection().prepareStatement("select * from cliente where codigo = ?");
			sql.setString(1, c.getCodigo());
			r=sql.executeQuery();
			
			if (r.next()){
				
				c.setCodigo(r.getString("codigo"));
				c.setNome(r.getString("nome"));
				c.setEndereco(r.getString("endereco"));
				c.setCep(r.getString("cep"));
				c.setBairro(r.getString("bairro"));
				c.setCpf(r.getString("cpf"));
				c.setIdentidade(r.getString("identidade"));
				c.setTel(r.getString("tel"));
				c.setTelCel(r.getString("telCel"));
				c.setTelTrabalho(r.getString("telTrabalho"));
				c.setNumero(r.getString("numero"));
				
								
				return c;
			}
			else
				JOptionPane.showMessageDialog (null, "Cliente não cadastrado!","ERRO",JOptionPane.ERROR_MESSAGE);
		}
			
		catch (Exception e){
			JOptionPane.showMessageDialog(null,"Erro durante a consulta no Banco de Dados :" +e, "ERRO",JOptionPane.ERROR_MESSAGE);
			
		}
		return null;
	}
	
	
	public Vector consultarTodos() {
   
		Vector v= new Vector();
   	
   		try {
				sql=DAOFactoryPSQL.getConnection().prepareStatement("select * from aluno");
				r=sql.executeQuery();
				while(r.next())
				{
				 Cliente cl= new Cliente();
				 cl.setNome(r.getString("nome"));
				 
				 
				 v.add(cl);
				 
				 
				 }
				return v;
			} catch (SQLException e) 
			{
				e.printStackTrace();
				return null;
			}
   	
   }
	
	public Vector consultarNome(Cliente c)
	   {
		   try
		   {
			   PreparedStatement sql=DAOFactoryPSQL.getConnection().prepareStatement("select * from aluno where nome like ?");
			   sql.setString(1, c.getNome()+"%");
			   ResultSet r= sql.executeQuery();
			   Vector v= new Vector();
			   while(r.next())
			   {
				     Cliente cl= new Cliente();
					 cl.setNome(r.getString("nome"));
					
					 
					 v.add(cl);
			   } 
		        return v;
		   }
		   catch (Exception e) 
		   {
			return null;
		}
	   }
	
	
	
	public Vector consultarMatricula(Cliente c)
	   {
		   try
		   {
			   PreparedStatement sql=DAOFactoryPSQL.getConnection().prepareStatement("select * from aluno where mat like ?");
			   sql.setString(1, c.getNome()+"%");
			   ResultSet r= sql.executeQuery();
			   Vector v= new Vector();
			   while(r.next())
			   {
				     Cliente am= new Cliente();
					 am.setNome(r.getString("nome"));
					
					 
					 v.add(am);
			   }
		        return v;
		   }
		   catch (Exception e) 
		   {
			return null;
		}
	   }
	
	
	public void finalize (){
		
		try {
			
			sql.close();
			
			
		}
		
		catch (Exception e){
			
		}
	}
	
}

Tipo amigos… .eu observei o meu erro mas até o momento não consigo descobrir o que fazer!!!
Nessa parte do código : if (comando.equals("excluir")){ telaExcluiCliente = new TelaExcluiCliente(); ControleExcluiCliente controleExcluiCliente = new ControleExcluiCliente(telaExcluiCliente); controleExcluiCliente.consultarExclusao(); }
Eu estou fazendo a chamada para meu controle e chamando o método consultarExclusao() que está em meu ControleExcluiCliente!!!

Para fazer um teste eu coloquei um JOptionPane npo contrutor de minha classe ControleExcluiCliente : [code] public ControleExcluiCliente (TelaExcluiCliente telaExcluiCliente){

	 this.telaExcluiCliente = telaExcluiCliente;
	 JOptionPane.showMessageDialog(null, "FOI AQUI");
	 telaExcluiCliente.setOuvinte(this);
	 
 }// fim do construtor

 [/code]

Eu verifiquei que minha classe está sendo chamada duas vezes!!!
Pois está menssagem FOI AQUI está surgindo duas vezes na tela!!
Mas não sei porque galera!!!
Me ajudem aeeeeeee!!!
Agradeço a todos!!!

Galera!!!

Po… estudando aqui meu código consegui descobrir o erro… Mas ainda não conseguir resolvê-lo!!
Pessoal… o código de minha classe ControleExcluiCliente () está assim: [code]
package controle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import modelo.Cliente;
import visao.TelaCadCliente;
import visao.TelaExcluiCliente;
import dao.DAOCliente;
import dao.DAOFactory;

public class ControleExcluiCliente implements ActionListener {

 String codigoExclusao;
 private TelaExcluiCliente telaExcluiCliente;
 Cliente cliente = new Cliente();
 private boolean temOCara = false;
 DAOFactory df=DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
 DAOCliente dao = df.getDAOCliente();
 TelaCadCliente telaCad = new TelaCadCliente() ;

 ControleCadCliente cCliente = new ControleCadCliente(telaCad);
 /*O problema está aqui ... não sei como vou poder acessar a variável codigoExclusao sem
	 * criar um objeto dessa classe ControleCadCliente()
	 * Mas se eu criar um novo objeto vou perder todos os valores que possuo e estão guardados nas 
	 * variáveis dessa classe
	 */
 
 
 public ControleExcluiCliente (TelaExcluiCliente telaExcluiCliente){
	 this.telaExcluiCliente = telaExcluiCliente;
	 JOptionPane.showMessageDialog(null, "FOI AQUI" +cCliente.getCodigoExclusao());
	 telaExcluiCliente.setOuvinte(this);
	 
 }// fim do construtor

 
 	 
 public void actionPerformed(ActionEvent evt) {
	
	String comando = evt.getActionCommand();
	
	if (comando.equals("sair")){
		fechar();
	
	}
	if (comando.equals("excluir")){
		 
		
		 Object [] opcoes = {" Sim "," Não "};
		 int n = JOptionPane.showOptionDialog(null, "Você tem certeza de que deseja excluir o cliente selecionado?", "Confirmar Exclusão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[0]);
		
		if (n==0){
			cliente.setCodigo(cCliente.getCliente().getCodigo());		
			if (cliente.getCodigo()==null){
				JOptionPane.showMessageDialog(null,"MERDA "+cliente.getNome());
			}
			dao.excluir(cliente);
			fechar();
			
		}
		
		
	}
} 


 public void fechar (){
	
	telaExcluiCliente.dispose();
}

 

 

public boolean getTemOCara(){
	return temOCara;
}

}[/code]

E minha classe ControleCadCliente está assim : [code]

package controle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import modelo.Cliente;
import visao.TelaAlterarCliente;
import visao.TelaCadCliente;
import visao.TelaConsultaCliente;
import visao.TelaExcluiCliente;
import dao.DAOCliente;
import dao.DAOFactory;

public class ControleCadCliente implements ActionListener {

	 private String codigo,codigoExclusao;
	 private TelaCadCliente tela ;	
	 private TelaConsultaCliente telaConsulta = new TelaConsultaCliente();
	 private TelaExcluiCliente telaExcluiCliente;
	 private TelaAlterarCliente telaAlterarCliente = new TelaAlterarCliente();
	 Cliente cliente = new Cliente();
	 DAOFactory df=DAOFactory.getDAOFactory(DAOFactory.POSTGRES);
	 DAOCliente dao = df.getDAOCliente();
	

	 
public ControleCadCliente(TelaCadCliente tela){
	
			
	this.tela = tela;
	
	//ativa os Listeners
	tela.setOuvinte(this);
}


public void actionPerformed(ActionEvent evt) {
	
	String comando = evt.getActionCommand();
	
	if (comando.equals("sair")){
		fechar();
	 }
	 else
		 if (comando.equals("cadastrar")){
			
			 if (tela.verificaCampos(tela.getCamposOk())){
				try{
					 Cliente cliente = new Cliente();
					 ControleCadCliente controle = new ControleCadCliente(tela);
					 TelaCadCliente cl = new TelaCadCliente();
					 
					 tela.mudaDados(cliente);
					 
											 
					 dao.cadastrar(cliente);
					 JOptionPane.showMessageDialog(null, "Cliente cadastrado com sucesso!","Cadastro de cliente",JOptionPane.INFORMATION_MESSAGE);
					 tela.limpaCampos();
				
				}
			 
				catch (Exception e){
					JOptionPane.showMessageDialog (null, "Erro durante a gravação do novo cliente! :"+e,"ERRO",JOptionPane.ERROR_MESSAGE);
					}
				
				}
			 
			 
			 
			 else
				 JOptionPane.showMessageDialog (null, "Os campos sinalizados com  *  são de preenchimento obrigatório!", "ATENÇÂO", JOptionPane.WARNING_MESSAGE);
		 }
	

				if (comando.equals("consultar")){
		
						ControleConsultaCliente ctrlConsultaCliente = new ControleConsultaCliente(telaConsulta);
						ctrlConsultaCliente.consultar();
		} 
			else
					 
		if (comando.equals("excluir")){
			consultarExclusao();
		}
	
		   else
	
			   if (comando.equals("alterar")){
		
			   }
	
		
	
		 else
			 if (comando.equals("limpar")){
				 tela.limpaCampos();
		}
		 
} 


public void fechar (){
	tela.dispose();
}



 public String consultarAlteracao(String codigo){

	 try{
		    Cliente cliente = new Cliente();
			codigo = JOptionPane.showInputDialog(null,"Digite o número do código do cliente","Alteração de Cliente", JOptionPane.QUESTION_MESSAGE);
			cliente.setCodigo(codigo);
			dao.consultar(cliente);
		    
			if (cliente.getNome() != null){
				TelaAlterarCliente tela = new TelaAlterarCliente();
				ControleAlterarCliente controle = new ControleAlterarCliente(tela);
				tela.setSize(800,600);
				tela.setVisible(true);
				tela.setLocation(200,200);
				
				tela.setDados(cliente);
			
			}
			
		}
		
		catch (Exception e){
			JOptionPane.showMessageDialog(null, "Código não encontrado!!!","ERRO",JOptionPane.ERROR_MESSAGE);

			
		}
		
 	
	 
	 return codigo;
 }

 public void consultarExclusao(){
		try{
				
			codigoExclusao = JOptionPane.showInputDialog(null,"Digite o número do código do cliente","Exclusão de Cliente", JOptionPane.QUESTION_MESSAGE);
			cliente.setCodigo(codigoExclusao);
			cliente=dao.consultar(cliente); 
			
			if (cliente.getNome() != null){
				telaExcluiCliente = new TelaExcluiCliente();
				ControleExcluiCliente controleExcluiCliente = new ControleExcluiCliente(telaExcluiCliente);
				telaExcluiCliente.setSize(800,600);
				telaExcluiCliente.setLocation(200,200);
				telaExcluiCliente.setVisible(true);
				telaExcluiCliente.setDados(cliente);
				codigoExclusao = cliente.getCodigo();
			
			}
			
		}
		
		catch (Exception e){
			JOptionPane.showMessageDialog(null, "Código não encontrado!!!","ERRO",JOptionPane.ERROR_MESSAGE);

			
		}
		
 }

public String getCodigoExclusao(){
return codigoExclusao;
}

public Cliente getCliente (){
return cliente;
}

}// fim da classe ControleCadCliente

[/code]

Eu vi que estava realizando duas chamadas em meus controles… por isso perdia o valor das variáveis quando chamava pela segunda vez… pois todas voltavam com o valor null!!!
Não sei se a lógica está confusa ou comlexa… Eu tentei fazer o seguinte!!
Ao clicar no meu para excluir o cliente eu disponibilizo um InputDialog para o usuário digitar o código do cliente… .em seguida eu mostro todos os dados do cliente para ele ver se é realmente ele que ele quer excluir… clicando no botão confirmar exclusão eu excluo o cliente do BD!!!

Ajuda ae pessoal!!!
Abraços!!!