Hola a todos, les dejo un pequeño codigo que he hecho para impedir que una aplicacion se ejecute mas de una vez. De modo que cuando el usuario quiera ejecutar mas de una vez la aplicacion que hemos desarrollado, NO PODRA HACERLO.
Clases que se ocupan:
# File
# RandomAccessFile
# FileLock
Sin mas demoras, les paso el codigo.
Existen varias maneras de realizar lo mismo, tambien se podria ocupar un ServerSocket(numeroPuerto) donde se produciria un error al intentar abrir un puerto ya ocupado.
Espero que les sirva y cualquier pregunta estoy a su disposicion.
Saludos
(COMENTARIOS FUERA DE LUGAR SERAN BORRADOS Y BLOQUEADOS)
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;
}
}
Existen varias maneras de realizar lo mismo, tambien se podria ocupar un ServerSocket(numeroPuerto) donde se produciria un error al intentar abrir un puerto ya ocupado.
Espero que les sirva y cualquier pregunta estoy a su disposicion.
Saludos
(COMENTARIOS FUERA DE LUGAR SERAN BORRADOS Y BLOQUEADOS)