解决方案 »

  1.   


    import java.io.File;
    import java.io.RandomAccessFile;
    import java.nio.channels.FileChannel;
    import java.nio.channels.FileLock;
    import java.nio.channels.OverlappingFileLockException;
    import java.util.RandomAccess;
    import javax.swing.JOptionPane;public class A1 {private FileChannel channel;private FileLock lock;private File file;public A1(String lockFileName) {
       file = new File(lockFileName);
    }public boolean isAppActive() {
       try {
        channel = new RandomAccessFile(file, "rw").getChannel();
        try {
         lock = channel.tryLock();    } catch (OverlappingFileLockException e) {
         closeLock();
         return true;
        }
        if (lock == null) {
         closeLock();
         return true;
        }
        Runtime.getRuntime().addShutdownHook(new Thread() {
         public void run() {
          closeLock();
          deleteFile();
         }
        });
        return false;
       } catch (Exception e) {
        closeLock();
        return true;
       }
    }protected void deleteFile() {
       try {
        file.delete();
       } catch (Exception e) {   }}private void closeLock() {
       try {
        lock.release();
       } catch (Exception e) {   }   try {
        channel.close();
       } catch (Exception e) {   }}public static void main(String[] args) {
       A1 a = new A1(".lock");
       if (a.isAppActive() == true)
        JOptionPane.showMessageDialog(null, "已有一个程序在运行,程序退出");   try {
        Thread.sleep(10000);
       } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }}}