Abrir .jar apenas uma vez

6 respostas
L

blz galera....

Como eu faço para abrir minha aplicação java apenas uma vez na maquina?ou seja ao tentar abrir o sistema novamente, ele aparecerá uma mensagem dizendo que o sistema já esta aberto.

eu tentei o seguinte código:
mas toda vez q eu abro uma janela dentro do sistema , ele mostra a mensagem que ja se encontra aberto o programa.

try {  
   //verificar se o programa se encontra aberto: 
   
            s = new ServerSocket(9581);  

        } catch (Exception e) {  
            JOptionPane.showMessageDialog(null, "ATENÇÃO:\n\nESTE PROGRAMA  SE ENCONTRA ABERTO!!!","SOFTWELL",2);  
            
            s.isClosed();
        }

6 Respostas

Luiz_Augusto_Prado

creio que um Singleton pode resolver.

Luiz_Augusto_Prado

pensando melhor… não é tão simples.

Vc poderia combinar o Singleton com dois arquivos marcadores.
atenção, pois se o programa se desligar forçadamente, ele poderia não interpretaria os arquivos de forma correta.

O primeiro arquivo diria se o programa está aberto e o segundo se a aplicação foi desligada normalmente da ultima vez.

certamente deverão existir opções melhores, mas se ninguém mais encontrar solução melhor, quando chegar do trabalho penso em uma e posto aqui. vou acompanhar o tópico.

Ataxexe

Use um FileLock em um arquivo, se conseguir obter o lock, o aplicativo não está em uso, caso contrário, está.

Um exemplo de como obter o lock:

Luiz_Augusto_Prado

Ataxexe:
Use um FileLock em um arquivo, se conseguir obter o lock, o aplicativo não está em uso, caso contrário, está.

Um exemplo de como obter o lock:

http://examples.javacodegeeks.com/core-java/nio/filelock/create-file-lock-on-file/

massa!

uma classe que faz a marcação pra gente:

File file = new File("fileToLock.dat");	             
	            // Creates a random access file stream to read from, and optionally to write to
	            FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
	            FileLock lock = channel.lock();
Ataxexe

Só uma curiosidade: essa estratégia de obter lock é muito utilizada e o Eclipse faz isso para saber se a workspace está sendo usada (só não me lembro agora em qual arquivo ele faz o lock, mas fica dentro do diretório .metadata).

pmlm

Provavelmente tens esse código no sitio errado.

Criado 3 de outubro de 2013
Ultima resposta 4 de out. de 2013
Respostas 6
Participantes 4