ciao!
vorrei impostare un blocco su file in modo da non poter lanciare due volte lo stesso programma contemporaneamente.
ho fatto una cosa così:
codice:
public class Locker {
private static final File file = new File("lock.clk");
private static FileChannel channel = null;
private static FileLock fileLock = null;
private static boolean isLocked = false;
public static boolean lock() throws FileNotFoundException, IOException {
if (!file.exists()) {
file.createNewFile();
channel = new RandomAccessFile(file, "rw").getChannel();
fileLock = channel.tryLock();
if (fileLock == null) {
isLocked = true;
}
}
return isLocked;
}
public static void unlock() throws IOException {
fileLock.release();
channel.close();
file.delete();
isLocked = false;
}
public static boolean isLocked() {
return isLocked;
}
}
il file lock.clk viene creato e cancellato correttamente.
solo che posso cmq lanciare più volte lo stesso programma, come se il lock non venisse fatto.
lo richiamo così nel jframe:
codice:
public static void main(String args[]) throws FileNotFoundException, IOException {
if (!Locker.isLocked()) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Main().setVisible(true);
}
});
Locker.lock();
} else {
JOptionPane.showMessageDialog(null, "Il file è bloccato da un altro processo");
}
}
dove sto sbagliando secondo voi??