swing初始化一个JFrame,不管点击多少次当且仅当只能打开一个窗口

Lishilin4510 2016-04-29 11:57:09
swing初始化一个JFrame,不管点击多少次当且仅当只能打开一个窗口,
...全文
428 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huntor 2016-04-29
  • 打赏
  • 举报
回复
启动时检查某个文件存在否?存在直接返回,不存在就创建,然后运行程序,退出时删除这个文件
tangxheng 2016-04-29
  • 打赏
  • 举报
回复
package com.lh.common.api.oneinstance;

/**
 * 
 * 唯一进程
 */
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;

/**
 * 唯一进程,不建议外部使用
 * @project_name 华程网管平台
 * @ClassName OneInstance 
 * @author 唐显恒 
 * @date 2012-12-5 下午02:06:44
 * @version 1.0
 */
public class OneInstance {

	private FileChannel channel;

	private FileLock lock;

	private File file;

	private static OneInstance instance = null;
	
	/**
	 * 获取唯一进程限制的实例
	 * @Title: getInstance
	 * @return  唯一进程实例
	 */
	public static OneInstance getInstance(){
		if(instance == null){
			instance = new OneInstance();
		}
		return instance;
	}
	
	/**
	 * 进程是否正在运行
	 * @Title: isAppActive
	 * @return  运行与否
	 */
	public boolean isAppActive() {
		File file = new File(".lock");
		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;
		}
	}
	
	/**
	 * 进程是否正在运行
	 * @Title: isAppActive
	 * @return  运行与否
	 */
	public boolean isAppActive(String path) {
		File file = new File(path);
		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) {
		if (OneInstance.getInstance().isAppActive() == true)
			JOptionPane.showMessageDialog(null, "已有一个程序在运行,程序退出");

		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
bajinggong 2016-04-29
  • 打赏
  • 举报
回复
把那个JFrame弄成单例,不论你怎么点怎么弄都只有一个。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧