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

如何让Java程序只能启动一次呢?
如题

------解决方案--------------------
在启动时检查系统进程,存在相同的就不启动了,不存在则启动。一个思路哈
------解决方案--------------------
用socket绑定端口
然后检查端口是否被占用
这个比较常用
------解决方案--------------------
最快的,socket还要用占系统的端口,
其实很简单,java程序启动是,先产生一个.lock的文件,并对此文件加锁,另一个就无法获得锁,听上去很复杂,其实实现很简单。程序如下

private boolean checkLock(){
FileOutputStream fo = null;
File file = new File( ".lock ");
try {
fo = new FileOutputStream(file);
//加锁,如果程序已经启动就无法获得锁
lock = fo.getChannel().tryLock();
if (lock == null) {
logger.warn( " <Warning> <Could not start epayment. this application is still alive.> ");
return false;
}else{
return true;
}
} catch (FileNotFoundException e) {
logger.error( "checkSftp: lock file can 't be created.error: " + e);
return false;
}catch (IOException e) {
logger.error( "checkSftp: lock file can 't be created.error: " + e);
return false;
}

}