Duvida para fechar um InternalFrame e depois abri-lo novamente

Eu tenho uma aplicação q ao se selecionar um id de uma lista, uma janela é aberta com as informações daquele respectivo id. Porém, quando é selecionado novamente um id que jah tem a sua janela aberta, o programa faz com que não se abra outra janela para aquele id e sim, faz com que a janela que já estava aberta venha para frente. Até aí eu consegui fazer. Criei um Map das minhas janelas abertas. Toda vez que um id é selecionado, primeiro eu verifico se a janela com esse id jah foi adicionada no meu map. O problema que eu estou encontrando é q quando eu fecho essa janela e depois tento abri-la novamente, eu não consigo. Criei uma função que deleta essa janela do meu map, mas não tah funcionando. Alguém, pode me ajudar?

public class JanelaPrincipal
private Map<String, JanelaSecundaria> seleciona = new TreeMap<String, JanelaSecundaria>();
public void constroiJanela(String id) {
  if (verificaSelecionado(id) == null) {
    seleciona.put(id, frmPrincipal.frm2);
    TopFrame.this.frmPrincipal.adicionarOutroFrame(); // chamado do metodo que abre uma nova janela
  }
  else {
    frmPrincipal.frm2 = verificaSelecionado(id);
    frmPrincipal.frm2.toFront();
}

public JanelaSecundaria verificaSelecionado(String idChave) {
  if (seleciona.get(idChave) != null) {
     return seleciona.get(idChave);
   }//end if
   return null;
   }

public void tiraSelecionado(String id){
        seleciona.remove(id);
    }
}

public class JanelaSecundaria{
 JanelaPrincipal tf = new JanelaPrincipal();
public JanelaSecundaria(){
  setSize(700,550);
  setLocation(0,25);
  setClosable(true);
   setVisible(true);
   setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
   addInternalFrameListener (new InternalFrameAdapter() {
   @Override
      public void internalFrameClosing (InternalFrameEvent ife){
            tf.tiraSelecionado(id);
             dispose();
       }
  } );
   setLayout(null);
   setBorder(null);
}

Já tentou usar um depurador?

Outra coisa… se você aceitar retornar o “null”, então esse método aqui:

public JanelaSecundaria verificaSelecionado(String idChave) { if (seleciona.get(idChave) != null) { return seleciona.get(idChave); }//end if return null; }

Não deveria ser simplesmente?

public JanelaSecundaria verificaSelecionado(String idChave) { return seleciona.get(idChave); }

a unica coisa q meu depurador fala é:

Have no FileObject for C:\Program Files\Java\jdk1.6.0_18\jre\lib\sunrsasign.jar
Have no FileObject for C:\Program Files\Java\jdk1.6.0_18\jre\classes

Mas eu não sei o q isso significa

Preciso usar o null pq quando retorna-se null, aí eu crio um novo objeto do tipo BottomFrame

if (verificaSelecionado(id) == null) { 
   TopFrame.this.frmPrincipal.adicionarOutroFrame(); // cria uma nova janela
}

else{
  frmPrincipal.frm2.toFront();   // senão tras ela pra frente
}