Classe para MENUS, não fecha a tela já aberta

E ae galera, blz???
Seguinte estou com um problema de menus. Eu criei uma classe para ter todos os menus e sempre incluir nesta classe novo menu quando necessário, sendo a intenção chamar nas outras VIEW’s esta classe. Funcionou bem até este ponto, porém quando utilizo o menu para abrir uma tela diferente, a tela que estava aberta não é encerrada, ficando assim as duas telas abertas, ocasionando problemas na memória ao abrir várias telas.

Classe onde estão todos os menus:

[code]package essenciais.util;

import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import email.cadastrar.VIEW.CadastrarEmailVIEW;
import email.cadastrar.controller.CadastrarEmailController;
import email.enviar.VIEW.EmailVIEW;
import email.enviar.controller.EmailController;
import revendedora.cadastrar.controller.RevendedoraController;
import revendedora.cadastrar.view.CadastrarRevendedoraVIEW;
import revendedora.pesquisar.controller.PesquisarRevendedoraController;
import revendedora.pesquisar.view.PesquisarRevendedoraVIEW;
import revista.cadastrar.controller.RevistaController;
import revista.cadastrar.view.CadastrarRevistaVIEW;
import revista.pesquisar.controller.PesquisarRevistaController;
import revista.pesquisar.view.PesquisarRevistaVIEW;
import vendas.cadastrar.controller.VendasController;
import vendas.cadastrar.view.CadastrarVendasVIEW;
import vendas.modificar.controller.ModificarVendasController;
import vendas.modificar.view.ModificarVendasVIEW;

import javax.swing.JInternalFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class MenusDasTelas extends JFrame{

private JMenu menuCadastros = null;
private JMenuItem menuCadastroRevendedora = null;
private JMenuItem menuCadastroRevista = null;
private JMenuItem menuCadastroVendas = null;
private JMenu menuVendas = null;
private JMenuItem menuModificarVendas = null;
private JMenu menuEmail = null;
private JMenuItem jMenuItemEmail = null;
private JMenuItem jMenuItemCadastrarEmail = null;
private JMenu menuPesquisar = null;
private JMenuItem jMenuItemPesquisarRevendedora = null;
private JMenuItem jMenuItemPesquisarRevistas = null;
private JMenuBar barraMenu = null;


/**
 * This method initializes barraMenu, com todos os menus da classe MenusDasTelas.
 * 	
 * @return javax.swing.JMenuBar	
 */
public JMenuBar getBarraMenu() {
	if (barraMenu == null) {
		barraMenu = new JMenuBar();
		barraMenu.setPreferredSize(new Dimension(0, 20));
		barraMenu.add(getMenuCadastros());
		barraMenu.add(getMenuVendas());
		barraMenu.add(getMenuEmail());
		barraMenu.add(getMenuPesquisar());
	}
	return barraMenu;
	
}


/**
 * 
 * Método responsável por controlar o menu CADASTRO em todas as telas
 *
 * @return
 * @author Felipe Luna Scobar <felipe_lunascobar@hotmail.com>
 * @since 10/08/2015 11:50:27
 * @version 1.0
 */
public JMenu getMenuCadastros(){
	if (menuCadastros == null) {
		menuCadastros = new JMenu();
		menuCadastros.setPreferredSize(new Dimension(70, 5));
		menuCadastros.setText("Cadastros");
		menuCadastros.add(getMenuCadastroRevendedora());
		menuCadastros.add(getMenuCadastroRevista());
		menuCadastros.add(getJMenuItemCadastrarEmail());
	}
	return menuCadastros;
}


/**
 * This method initializes menuVendas	
 * 	
 * @return javax.swing.JMenu	
 */
public JMenu getMenuVendas() {
	if (menuVendas == null) {
		menuVendas = new JMenu();
		menuVendas.setText("Vendas");
		menuVendas.setBounds(new Rectangle(80, 0, 65, 18));
		menuVendas.add(getMenuCadastroVendas());
		menuVendas.add(getMenuModificarVendas());
	}
	return menuVendas;
}


/**
 * This method initializes jMenuEmail	
 * 	
 * @return javax.swing.JMenu	
 */
public JMenu getMenuEmail() {
	if (menuEmail == null) {
		menuEmail = new JMenu();
		menuEmail.setText("EMAIL");
		menuEmail.add(getJMenuItemEmail());
	}		
	return menuEmail;
}


/**
 * This method initializes jMenuPesquisar	
 * 	
 * @return javax.swing.JMenu	
 */
public JMenu getMenuPesquisar() {
	if (menuPesquisar == null) {
		menuPesquisar = new JMenu();
		menuPesquisar.setText("Pesquisar");
		menuPesquisar.add(getJMenuItemPesquisarRevendedora());
		menuPesquisar.add(getJMenuItemPesquisarRevistas());
	}
	return menuPesquisar;
}


/**
 * This method initializes menuCadastroRevendedora	
 * 	
 * @return javax.swing.JMenuItem	
 */
private JMenuItem getMenuCadastroRevendedora() {
	if (menuCadastroRevendedora == null) {
		menuCadastroRevendedora = new JMenuItem();
		menuCadastroRevendedora.setPreferredSize(new Dimension(90, 21));
		menuCadastroRevendedora.setText("Revendedora");
		menuCadastroRevendedora.addActionListener( new ActionListener() {

			@Override
			public void actionPerformed( ActionEvent e ) {
				CadastrarRevendedoraVIEW revendedora = new CadastrarRevendedoraVIEW();
				// Alterando a forma de fechamento da tela.
				revendedora.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
				RevendedoraController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
				
			}
		});
	}
	return menuCadastroRevendedora;
}

/**
 * This method initializes menuCadastroRevista	
 * 	
 * @return javax.swing.JMenuItem	
 */
private JMenuItem getMenuCadastroRevista() {
	if (menuCadastroRevista == null) {
		menuCadastroRevista = new JMenuItem();
		menuCadastroRevista.setText("Revista");
		menuCadastroRevista.setPreferredSize(new Dimension(90, 21));
		menuCadastroRevista.addActionListener( new ActionListener() {

			@Override
			public void actionPerformed( ActionEvent e ) {
				CadastrarRevistaVIEW revista = new CadastrarRevistaVIEW();	
				// Alterando a forma de fechamento da tela.
				revista.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
				RevistaController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
			}
		});
	}
	return menuCadastroRevista;
}



private JMenuItem getMenuCadastroVendas() {
	if (menuCadastroVendas == null) {
		menuCadastroVendas = new JMenuItem();
		menuCadastroVendas.setText("Vendas");
		menuCadastroVendas.addActionListener( new ActionListener() {

			@Override
			public void actionPerformed( ActionEvent e ) {
				CadastrarVendasVIEW vendas = new CadastrarVendasVIEW();
				// Alterando a forma de fechamento da tela.
				vendas.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				VendasController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
			}
		});
	}

	return menuCadastroVendas;
}



/**
 * This method initializes menuModificarVendas	
 * 	
 * @return javax.swing.JMenuItem	
 */
private JMenuItem getMenuModificarVendas() {
	if (menuModificarVendas == null) {
		menuModificarVendas = new JMenuItem();
		menuModificarVendas.setText("Modificar Vendas");
		menuModificarVendas.addActionListener( new ActionListener() {

			@Override
			public void actionPerformed( ActionEvent e ) {
				ModificarVendasVIEW vendas = new ModificarVendasVIEW();
				// Alterando a forma de fechamento da tela.
				//vendas.setVisible( true );
				vendas.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				// Tornando a tela do EventoBotaoAvancado visivel.
				ModificarVendasController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
			}
		});			
	}
	return menuModificarVendas;
}


/**
 * This method initializes jMenuItemEmail	
 * 	
 * @return javax.swing.JMenuItem	
 */
public JMenuItem getJMenuItemEmail() {
	if (jMenuItemEmail == null) {
		jMenuItemEmail = new JMenuItem();
		jMenuItemEmail.setText("Enviar E-MAIL");
		jMenuItemEmail.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				EmailVIEW email = new EmailVIEW();
		
				// Alterando a forma de fechamento da tela.
				email.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
				EmailController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
				
			}
		});
	}
	return jMenuItemEmail;
}

/**
 * This method initializes jMenuItemCadastrarEmail	
 * 	
 * @return javax.swing.JMenuItem	
 */
private JMenuItem getJMenuItemCadastrarEmail() {
	if (jMenuItemCadastrarEmail == null) {
		jMenuItemCadastrarEmail = new JMenuItem();
		jMenuItemCadastrarEmail.setText("E-MAIL");
		jMenuItemCadastrarEmail.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed( ActionEvent e ) {
				CadastrarEmailVIEW cadastrarEmail = new CadastrarEmailVIEW();
				// Alterando a forma de fechamento da tela.
				cadastrarEmail.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
				CadastrarEmailController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
			}
		});
	}
	return jMenuItemCadastrarEmail;
}



/**
 * This method initializes jMenuItemPesquisarRevendedora	
 * 	
 * @return javax.swing.JMenuItem	
 */
private JMenuItem getJMenuItemPesquisarRevendedora() {
	if (jMenuItemPesquisarRevendedora == null) {
		jMenuItemPesquisarRevendedora = new JMenuItem();
		jMenuItemPesquisarRevendedora.setText("Revendedora");
		jMenuItemPesquisarRevendedora.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed( ActionEvent e ) {
				PesquisarRevendedoraVIEW pesquisarRevendedora = new PesquisarRevendedoraVIEW();
				
				// Alterando a forma de fechamento da tela.
				pesquisarRevendedora.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
				PesquisarRevendedoraController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
			}
		});
	}
	return jMenuItemPesquisarRevendedora;
}


/**
 * This method initializes jMenuItemPesquisarRevistas	
 * 	
 * @return javax.swing.JMenuItem	
 */
private JMenuItem getJMenuItemPesquisarRevistas() {
	if (jMenuItemPesquisarRevistas == null) {
		jMenuItemPesquisarRevistas = new JMenuItem();
		jMenuItemPesquisarRevistas.setText("Revista");
		jMenuItemPesquisarRevistas.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed( ActionEvent e ) {
				PesquisarRevistaVIEW pesquisarRevista = new PesquisarRevistaVIEW();
				
				// Alterando a forma de fechamento da tela.
				pesquisarRevista.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
				PesquisarRevistaController.getInstance().abrirTela();
				//TODO
				// Fechando a tela quando chamar algum menu.
				dispose();
			}
		});
	}
	return jMenuItemPesquisarRevistas;
}

}
[/code]

Método que uso para chamar os menus:

[code] private JMenuBar getBarraMenu() {
if (barraMenu == null) {
barraMenu = new JMenuBar();

		MenusDasTelas menusDasTelas = new MenusDasTelas();
		
		barraMenu.setPreferredSize(new Dimension(0, 20));
		
		//Chamando o método da classe MenusDasTelas;
		barraMenu.add(menusDasTelas.getBarraMenu());
		

	}
	return barraMenu;
	
}[/code]

Estou com a mesma dúvida!