Home / Programmazione / Java / Bloccare più istanze di un programma con JUnique
Mattepuffo

Bloccare più istanze di un programma con JUnique

Bloccare più istanze di un programma con JUnique

Ho trovato questa comoda libreria che permette di eseguire il lock di un programma se questo è già avviato: JUnique.

In sostanza con questa libreria evitiamo di avviare più istanze di un programma.

Prima di tutto scaricate la libreria da qua.

Io ho scaricato l'ultima versione, ed ho testato il tutto su Java 7.

Ma dovrebbero funzionare tutte le versioni a partire da J2SE 1.4.

Una volta scaricato basta aggiungere il jar al progetto o al classpath e usare la libreria:

import it.sauronsoftware.junique.AlreadyLockedException;

import it.sauronsoftware.junique.JUnique;

A questo modifichiamo il main della nostra applicazione; prendiamo un JFrame:

public static void main(String args[]) {
    String appId = "mp.book";
    boolean alreadyStarted;
    try {
       JUnique.acquireLock(appId);
       alreadyStarted = false;
    } catch (AlreadyLockedException ex) {
       alreadyStarted = true;
    }
    if (!alreadyStarted) {
    try {
       for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
          if ("Nimbus".equals(info.getName())) {
          javax.swing.UIManager.setLookAndFeel(info.getClassName());
          break;
         }
      }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
     java.awt.EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
             new FormMain().setVisible(true);
       }
    });
  } else {
     JOptionPane.showMessageDialog(null, "Book already started!");
  }
}

In pratica appena entriamo nel main impostiamo un ID per la nostra applicazione; cercate di dare un nome il più possibile univoco in modo da non  cozzare con eventuali altre applicazioni.

Acquisiamo il lock sull'ID e sotto controlliamo il valore si alreadyStarted.

Se è TRUE avviamo l'applicazione, sennò ho messo un messaggio di errore, ma non è obbligatorio.

Come vedete la libreria è molto semplice da usare!