Hola a todos, les dejo un pequeño codigo que he hecho para impedir que una aplicación se ejecute mas de una vez. De modo que cuando el usuario quiera ejecutar mas de una vez la aplicación que hemos desarrollado, NO PODRÁ HACERLO.
Clases que se ocupan:
# File
# RandomAccessFile
# FileLock
Sin mas demoras, les paso el codigo.
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileLock;
public class SinglentonApp {
public static void main(String[] args){
if (lockInstance("file.lock")) { // nombre del archivo a bloquear
new NuestraClaseMain(args); // Clase que arranca el programa
}
}
}
public static boolean lockInstance(final String lockFile) {
try {
final File file = new File(lockFile);
final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
final FileLock fileLock = randomAccessFile.getChannel().tryLock(); // intenta bloquear el archivo
if (fileLock != null) { // si lo bloqueo
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
fileLock.release(); // Libera el bloqueo
randomAccessFile.close(); // Cierra el stream
file.deleteOnExit(); // Borra el archivo cuando se cierra el programa
} catch (IOException e) {
System.err.println(e);
}
}
});
return true;
}
} catch (IOException e) {
System.err.println(e);
}
return false;
}
}
Fuente: darkilopezArgentina