Originariamente inviato da John360
potresti spiegarmi la soluzione più semplice, o magari anche la seconda gentilmente?
non conosco niente del genere, a parte forse il lock sul file(intendi il lucchetto che usano i thread??)
EDIT: i file .jar creati con eclipse non sono degli eseguibili?
Nessun JAR è eseguibile (che lo crei Eclipse, NetBeans, BlueJ, io a mano)... è un archivio ZIP con l'estensione modificata... insomma, un file di dati come un altro.
Per evitare che vengano aperte più istanze dello stesso programma è sufficiente che il programma, come prima cosa, apra una ServerSocket su una porta prestabilita.
codice:
public static void main(String[] args) {
try {
ServerSocket s = new ServerSocket( 31978 ); // Un numero (intero) di porta a caso
... // Normale prosecuzione del programma
} catch (Exception e) {
// Eccezione... probabilmente c'è già un'istanza aperta
}
}
La prima copia del programma che viene avviata, creerà la socket poichè la porta sarà (presumibilmente) libera, quindi proseguirà con la normale esecuzione.
Le copie successive non riusciranno a creare la socket perchè la porta è già impegnata dalla prima copia, quindi verrà sollevata un'eccezione, che viene catturata e, semplicemente, ignorata... quindi il programma termina senza fare nulla.
Si può anche mostrare un messaggio a video per informare l'utente che vi è già una copia del programma aperta, quello è solo un esempio piuttosto user-unfrendly. 
Ciao.