Questo un esempio banalissimo:
Se non c'è nessun lock (è la prima volta che si avvia l'applicazione), viene aperta la finestra, altrimenti viene visualizzato il messaggio d'errore.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(); } }
Ciao.![]()



Rispondi quotando