Preciso implementar um Singleton (eu acho :? ) … minha aplicação tem uma GUI e eu só posso permitir uma tela …
Meu codigo (resumido):
[code]
public final class AppFaturamento
extends Observable
implements IObservable
{
/** Instancia única deste objeto*/
private static final AppFaturamento _theInstance = new AppFaturamento();
/Construtor/
private AppFaturamento() {
//instancia minha GUI (outra classe)
//mostra, etc. e tal
}
/* Carrega a instancia */
public static AppFaturamento getInstance() {
return _theInstance;
}
/**
* Entrada do programa.
*/
public static void main(String[] args) {
AppFaturamento.getInstance();
}
}[/code]
Mas ele esta instanciando varios objetos da minha classe …
Voce voce esta iniciando duas aplicacoes distintas, entao realmente seria criado duas estaticas, ja que sao areas de memoria diferentes ( ao contario do que acontece em servlets, por exemplo ).
Se quiser impedir que o usuario rode mais de uma instancia do programa, voce pode fazer algo mais arcaico, como criar um arquivo de lock em disco e verificar se ele existe… se existir, ja tem um programa rodando ( claro que isso eh bem sujeito a problemas do tipo “programa quebra e nao remove o lock”, mas serve mais como ideia do que como implementacao )
Outra idéia talvez algo parecido com o que o rafael disse, é colocar um Socket Server em uma porta definida por vc, e fazer tratamento de erros caso uma segunda instancia do Socket Server for subir. Assim vc já sabe que existe uma copia em execução, dá uma mensagem e finaliza o programa.