Reconhecer uma instancia do programa já aberto

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

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…

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.

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…

[quote]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.[/quote]
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

[quote=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…[/quote]
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.