Questo un esempio banalissimo:

codice:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Locked extends JFrame {

   private static File fileLock = new File("mioFile.lck");
   private static RandomAccessFile raf = null;
   private static FileChannel fc = null;
   private static FileLock lock;
   

   public Locked() {
      setSize(800, 600);
      setTitle("Prima ed unica istanza");
      setDefaultCloseOperation( DO_NOTHING_ON_CLOSE );
      addWindowListener( new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent we) {
            chiudiApplicazione();
         }
      });
      setLocationRelativeTo( null );
      setVisible( true );
   }

   private void chiudiApplicazione() {
      // Rilascio il lock
      dispose();
      try {
         lock.release();
         fc.close();
         raf.close();
         fileLock.delete();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static void main(String[] args) {
      if ( tryLock() ) {
         Locked l = new Locked();
      } else {
         JOptionPane.showMessageDialog(null, "Altra applicazione già avviata", "Errore", JOptionPane.ERROR_MESSAGE);
      }
   }

   private static boolean tryLock() {
      boolean ret = false;

      try {
         raf = new RandomAccessFile(fileLock, "rw");
         fc = raf.getChannel();
         lock = fc.tryLock();
         if (lock != null) {
            ret = true;
         }
      } catch (Exception e) {
         e.printStackTrace();
      }

      return ret;
   }

   private static void apriFinestra() {
      Locked l = new Locked();
   }
}
Se non c'è nessun lock (è la prima volta che si avvia l'applicazione), viene aperta la finestra, altrimenti viene visualizzato il messaggio d'errore.


Ciao.