aplicação cria um arquivo de lock (se Java 1.4 ou superior) em um lugar determinado. Novas instâncias falham em obter o lock no arquivo e se recusam a iniciar
aplicação inicia um server socket numa porta determinada. Próxima instância falha ao tentar fazer o mesmo (possivelmente dispara aviso do firewall).
Eclipse usa “1”. Veja também esta thread nos fóruns da Sun:
Procure no workspace do Eclipse um arquivo em .metadata/.lock . Ele não permite mais de uma instância em um workspace. O que terias que fazer é referenciar um único arquivo, que funcionaria de maneira semelhante ao Eclipse.
Mas eu consigo rodar duas instâncias do meu programa ao mesmo tempo no eclipse…
Como seria feito esse controle com o arquivo? quando iniciar o aplicativo eu abro o acesso a esse arquivo? o que me impediria de outra instância também abrir esse acesso?
O seu programa teria que criar um arquivo que seria sua chave. Quando iniciar, ele procura esse arquivo e tenta abrir (usando uma API de arquivo blocante, para isso basta procurar um pouco aqui no fórum mesmo) , se conseguir, é porque não existe instância de seu programa rodando, se não conseguir, é porque há instância e aí você mata a execução.