Duvidazinha: Interfaces usando Singleton

Queria tirar uma duvidazinha besta aqui.

To testando usar as interfaces da app aqui c Singleton, p instanciar uma vez so e n perder tempo carregando varias vezes, dai pegou td blz, a classe das interfaces ficou mais ou menos assim:

public classe ClassFrame {

  private static ClasseFrame instance = null;
  
  private ClassFrame () {
    init();
  }

  public synchronized static ClassFrame getInstance() {
    ...
  }
  
  //demais metodos
  ...

}

Ate ai blz. To c uma duvidazinha chata na hr de fechar a janela.
Qnd fecha a janela ou clica no botao sair, o Netbeans usa como default dispose(), mas dispose() “quebra” o Singleton, pois ela finaliza o objeto.
Entao o certo seria usar hide() nas operacoes de saida, p n detonar o objeto Singleton. Confere?

So que, o NetBeans ta dando o hide() como deprecidado, mas eu vi no site da Sun e la n dava como depreciado. E por isso fiquei meio c pé atras em utilizar o hide().

Eu to usando o hide(), mas queria saber como vcs tao fazendo isso so p confirmar.

Vcs usam o hide() msm ou deixam c dispose() e deixam o Singleton p la?

Use setVisible( true ou false ) no lugar de show e hide.
No site da Sun não fala pois está desatualizado…

O dispose vai fazer o frame ser liberado… Para usar ele de novo vc teria que instanciar novamente.

eh msm, no lugar de “hide()”, so usar “setVisible(false)”, esqueci, eheheh.

entao o certo c singleton eh usar na acao do botao SAIR “setVisible(false)” no lugar de “hide()”, ai fica perfeito, confere? vlw…

[quote=hlds]eh msm, no lugar de “hide()”, so usar “setVisible(false)”, esqueci, eheheh.

entao o certo c singleton eh usar na acao do botao SAIR “setVisible(false)” no lugar de “hide()”, ai fica perfeito, confere? vlw…[/quote]

Isso ae!

vlw…

Cara, pode ser que eu esteja enganado, mas existe um problema em utilizar o setVisible ao invés de realmente liberar a memória ao fechar a janela:

digamos que você tenha uma janela que é uma lista com mais de 1000 objetos que vieram de um banco. Se vc simplesmente fizer um setVisible(false) nesta janela isso irá manter estes 1000 objetos em memória ou seja, sua aplicação irá ficar pesada com o tempo, comendo muita memória em cada janela que você abrir.

Eu resolveria da seguinte forma: criaria uma classe chamada Controlador.java. nesta classe eu criaria um método digamos:

public void visualizarClientes(List<Cliente> clientes){
      ClassFrame.getInstance().popularClientes(clientes);
}

Acredito que desta forma o seu ClassFrame continue “vivo” (instanciado) dentro da classe controladora e sua visão (a janela) poderia ser fechada liberando os 1000 objetos recuperados do banco.

Assim, escrevi isso rápido, provavelmente tenha que melhorar um pouco mais esta idéia.

Flw

eu axo q depende da app q vc for desenvolver, nesse caso de BD, talvez der esse problema msm.

mas se for uma app onde sao poucas as janelas e elas n carregam nd d banco, so configuracoes de properties ou entradas de dados (meu caso), ai axo util pois n ira consumir memoria excessiva e vc ganha em velocidade, as janelas voam ao abrir. por isso depende do caso.

voltando ao seu caso, pelo q entendi, vc sugeriu criar 1 classe controladora q pega objeto ClassFrame(singleton) e popula ele, dps de usar, essa classe controladora morreria, eh isso? a ideia eh interessante, mas analisando aqui (se eh d jeito d to pensando), se a classe controladora popular a ClasseFrame c os dados, msm ela morrendo, esses dados vao ficar na ClasseFrame(consumindo memoria), a n ser q o componente q recebesse os dados do BD estivesse na controladora, mas ai, eu nem sei como arrumar isso, e axo q n dar certo ou n fica tao claro.

msm assim vlw o toque