日期:2014-05-20  浏览次数:20632 次

这是一个防止程序运行多次的程序!有几个看不懂!
为什么这个程序能实现防止运行多次呢?
FileChannel,FileLock   这2个类到底有什么用啊.
文件通道到底是什么东东?
 
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();
}

}

}



------解决方案--------------------
路过,学习!
------解决方案--------------------
是用来锁定的 一旦有该程序运行 就对其进行锁定,打开时县要通过这些 来判断是否有一个相同程序已经在运行
------解决方案--------------------
真是学无止境啊!
看了lz的程序
才去翻了翻API
第一次知道还有nio这个包(才疏学浅,见笑了)
java.io 类 RandomAccessFile
java.nio.channels 类 FileChannel
里面都说的很清楚了,lz可以自己看看。