Single Instance com Thread [RESOLVIDO]

4 respostas
hiroc

Olá pessoal,
estou tentando fazer um teste que cheque se já possui uma instância do programa aberta usando Thread.

Por favor, me ajudem...eis o q estou tentando fazer...

public classe App implements Runnable{
 run(){
      apliacao
 }

 App(){
      coisas
 }

 main(){
  App app = new App();
  Thread t = new Thread(app)
  t.setName("teste1");
 }

}

como e ONDE eu faço para testar se já tem uma instancia da aplicação rodando para que não se abra 2 vezes o programa ao mesmo tempo?

valew!

4 Respostas

ViniGodoy

Não se faz com thread. Aliás, há poucas formas viáveis de se fazer isso em Java.

Uma das que funciona é abrir um SocketServer em uma porta qualquer. E negar abrir o programa caso essa porta não abra.

dmandrak

ViniGodoy:
Não se faz com thread. Aliás, há poucas formas viáveis de se fazer isso em Java.

Uma das que funciona é abrir um SocketServer em uma porta qualquer. E negar abrir o programa caso essa porta não abra.

Exatamente.

“Tente abrir uma porta e se ela já estiver aberta, não rode.”

hiroc

entendi…
vou tentar então, valew!

hiroc

como fui orientado, resolvi meu problema assim:

ao iniciar o código, há um 'teste'

try{
			@SuppressWarnings("unused")
			ServerSocket socket = new ServerSocket(12345);
		}catch(BindException bindEx){
			//Se a porta  estiver alocada, a aplicação  está aberta.
			mensagem("A aplicação já está aberta!", true);
		}catch(IOException ioEx){
			mensagem("Não foi possível abrir a aplicação!", true);
		}

Aloco a porta, dae se outro carinha (instância do programa) tentar acessar essa porta, uma exceção do tipo BindException vai ser lançada, sendo assim, dou a mensagem de erro e mando um System.exit(0);

valew!

Criado 7 de outubro de 2008
Ultima resposta 10 de out. de 2008
Respostas 4
Participantes 3