保证Java程序只能启动单一实例的方法

2014-07-12 22:03:47|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, 界面设计, Swing|来源:唯设编程网

在我们编写很多程序的时候都需要保证程序只能启动单一实例,本文介绍Java使用Swing编程时保证程序只能启动单一实例的方法。

程序要实现的效果如下,如果Java编写的Swing程序已经启动,则弹出如下对话框提示用户Java程序已经启动:

保证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程序。

发表评论0条 】
网友评论(共?条评论)..
保证Java程序只能启动单一实例的方法