[+ 1 DÚVIDA]Singleton em JDesktopPane tem lógica fazer isso?

13 respostas
D

Pessoal, andei vendo algumas coisas sobre Singleton, e surgiu a seguinte dúvida, há alguma lógica em aplicá-lo no meu JDesktopPane?
Sendo que este é aberto ao rodar o sistema e não há como abrir uma nova instância dela sem que esta seja fechada e mande o sistema rodar novamente…

Bom… é isso, há alguma lógica pessoal??
Estou fazendo o meu TCC, e achei interessante colocar o singleton…
não deixa de ser um “algo a mais…”, né?

Obrigada:-)

13 Respostas

pvrsouza

Eu acho qeu tem ligica sim!
Eu fiz um jogo com Swing e criei um singleton no Panel principal para que o usuario não conseguisse logar mais de uma vez no sistema.

Abraços

D

Ahhhh… sim… legal!! Entendi o pq de vc ter usado…!! Interessante!!

No meu caso eu usaria para abrir um JInternalFrame (por ex. com nome Classe2) dentro de outro JInternalFrame (Classe1) ao clicar em um botão.

Estou pensando em fazer isso pegando a instância da minha classe Principal e dando um add nele com o novo JInternalFrame que deve ser aberto…

No ActionPerformed do meu botão da Classe1 colocaria por ex.:

Classe2 c2 = new Classe2();
Principal.getTelaPrincipal().add(this)
c2.Visible(true);

Na classe Principal eu faria os métodos necessários para utilizar o singleton…

Bom tudo isso que eu falei é pra saber se na sua opinião para fazer isso o correto é utilizar o singleton?

ViniGodoy

Essa é uma maneira simples de resolver o problema. Desde que você não invente muita moda no seu singleton, e use somente um classloader, é até uma solução relativamente limpa.

D

Vini, há quanto tempo não recebo uma resposta sua!!
:slight_smile: Fiquei feliz em ver que vc respondeu!:smiley:

Muito obrigada pela ajuda!!

pvrsouza, obrigada tbm!:slight_smile:

ViniGodoy

Oi.

Fazia tempo também que não te via no fórum.

É só uma boa lembrar que o padrão Singleton funciona muito mal em Java. Principalmente na presença de múltiplos classloaders.

E a maneira ideal de implementa-lo é a mais simples, sem a tal da "lazy initialization". É a mais rápida e thread-safe:

public class SeuSingleton {

    private static SeuSingleton instance = new SeuSingleton(); //Inicie aqui

    private SeuSingleton() {  //Mantenha o construtor privado.
    }

    public SeuSingleton getInstance() { 
        return instance; 
    }
}

Uma implementação comum é colocar null em instance. A idéia seria evitar que o Singleton seja instanciado até que seja invocado pela primeira vez.
Entretanto, isso torna a implementação do método getInstance() mais complexa e, no fundo, essa garantia a VM do java já dá para você, já que ela só carrega classes a primeira vez que são usadas.

D

Vini… muito obrigada pela resposta!!
:slight_smile:
Como comecei a ver alguns materiais sobre singleton foi muito útil este seu post…

Obrigada novamente:-D

pvrsouza

dina:
Vini, há quanto tempo não recebo uma resposta sua!!
:slight_smile: Fiquei feliz em ver que vc respondeu!:smiley:

Muito obrigada pela ajuda!!

pvrsouza, obrigada tbm!:-)

Tamo aqui para isso!

:slight_smile:

D

Pessoal, venho com mais uma dúvida…
Por exemplo, eu usei o singleton no meu JDesktopPane…
Mas, as minhas JInternalFrame podem ser abertas/instanciadas quantas vezes o usuário clicar no menu e mandar abrir.

Vini, vc disse que singleton não funciona tão bem em java… e tal… certo?!

Bom, então… não seria esta a melhor forma de tratar as minhas JInternalFrame, é isso?!
Há uma forma “melhor”?!

Pra falar a verdade não entra na minha cabeça ter vários atributos static… hum… estou errada?!

Bom é isso, valeu…

ViniGodoy

Eu já usei em sistemas desktops. Não acho que seja uma forma ruim. O singleton é especialmente problemático em aplicações com multiplos classloaders e isso é mais comum em web. Acho que no seu caso você pode usar tranquila.

D

Viniiiii… obrigada:-)

D

E mais uma vez com uma dúvida…
Desculpem abrir, fechar, abrir, fechar este tópico…

Eu to fazendo o meu TCC, e tenho que apresentá-lo dia 17/11. Estou correndo contra o tempo…
Implementei o singleton no meu JDesktopPane como foi falado nos tópicos anteriores…

Sobre implementar nas minhas JInternalFrames não sei se dará tempo para fazer isso em tudo… Então, a dúvida é:
1. Há algum problema em implementar somente no meu JDesktopPane??

2. Para eu falar para a banca que eu utilizei Singleton no meu projeto seria necessário implementar em todas as minhas “janelas”?

Obrigada!!!

ViniGodoy

Pode ser só no JDesktopPane mesmo. A princípio, ele é o único que é “único” no sistema.

D

Vini, verdade! Interessante!!
Obrigada novamente!!:slight_smile:

Criado 8 de novembro de 2010
Ultima resposta 11 de nov. de 2010
Respostas 13
Participantes 3