Reconhecer uma instancia do programa já aberto

5 respostas
joselmocs

Olá pessoal, ká estou eu outra vez.

Preciso saber se há alguma forma, se existir, de saber se minha aplicação já está rodando na máquina. Isto para evitar que o mesmo programa seja aberto duas ou mais vezes.
Se exitir alguma forma de fazer isto, poderiam me dizer qual a melhor forma de faze-lo?

Obrigado

5 Respostas

Guitar_Men

Não conheço algo nativo do java pra fazer isso. Depende do SO, mas quando eu programava em c++ fazia o controle via arquivos .LOCK…

pmlm

Nunca precisei de fazer isso mas já vi por aqui mais que uma vez a sugestão de abrir um socket para uma porta local no inicio da aplicação. Se a porta já estiver em uso é porque outra instância já está em execução.

Guitar_Men

Eu não faria por socket, vai que alguem em um dia resolve usar essa mesma porta e a desgraça simplesmente não funciona ??
No inicio da execução do aplicativo verifique se existe um arquivo com o nome da aplicação por exemplo, se não tiver vc cria se tiver vc encerra a aplicação. Só tome cuidado nos tratamento de exceptions, que possam resultar em uma finalização da aplicação, de deletar o arquivo em questão antes de encerrar o aplicativo…

joselmocs

Ou de não deletar…
Ou então, usar um arquivo batch (.bat ou .sh) que verifica com chamadas ao sistema se há um processo com o nome do programa antes de chamar a aplicação em si.

Geralmente eu escrevo um executável escrito em C++ chamando a aplicação java pelo jre. Fazendo desta forma eu creio que dê pra controlar o processo da aplicação no sistema… Enfim, vou dar uma pesquisada nos processos em C.

Obrigado

WellingtonRamos

Guitar_Men:
Eu não faria por socket, vai que alguem em um dia resolve usar essa mesma porta e a desgraça simplesmente não funciona ??
No inicio da execução do aplicativo verifique se existe um arquivo com o nome da aplicação por exemplo, se não tiver vc cria se tiver vc encerra a aplicação. Só tome cuidado nos tratamento de exceptions, que possam resultar em uma finalização da aplicação, de deletar o arquivo em questão antes de encerrar o aplicativo…

Ou de não deletar…
Ou então, usar um arquivo batch (.bat ou .sh) que verifica com chamadas ao sistema se há um processo com o nome do programa antes de chamar a aplicação em si.

Criado 18 de agosto de 2010
Ultima resposta 18 de ago. de 2010
Respostas 5
Participantes 4