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??