2014-07-12 22:03:47|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Java, 界面设计, Swing|来源:唯设编程网
在我们编写很多程序的时候都需要保证程序只能启动单一实例,本文介绍Java使用Swing编程时保证程序只能启动单一实例的方法。
程序要实现的效果如下,如果Java编写的Swing程序已经启动,则弹出如下对话框提示用户Java程序已经启动:
程序的代码如下:
//在应用程序的main方法里调用该方法以保证只有一个实例运行
public static void makeSingle(String singleID){
RandomAccessFile raf = null;
FileChannel channel = null;
FileLock lock = null;
try{
File sf= new File(System.getProperty("java.io.tmpdir")+singleID+".tmp");
sf.deleteOnExit();
sf.createNewFile();
raf = new RandomAccessFile(sf, "rw");
channel = raf.getChannel();
lock = channel.tryLock();
if(lock == null){
//如果没有得到锁,则退出程序
//没有必要手动关闭流,当程序退出时,它们会自动关闭
JOptionPane.showMessageDialog(null, "程序已经启动","提示",JOptionPane.OK_OPTION);
System.exit(0);
}
}catch(Exception err){
err.printStackTrace();
}
}
private StartUp() {
makeSingle("vcsos.familyAsset");
主要的思路就是在临时目录定义了一个临时文件,文件名根据程序给定的ID来指定,并使用FileChannel的tryLock方法将文件锁定,如果锁定成功,则说明Java对应的Swing程序没有启动,反之,则说明已经启动了对应的Swing程序。