首页 > 代码库 > java程序在一个电脑上只启动一次,只开一个进程

java程序在一个电脑上只启动一次,只开一个进程

方案1:

单进程程序可以用端口绑定。程序启动的时候可以尝试看该端口是否已经被占用,如果占用则程序已经启动。

方案2:
你可以在java程序中创建一个隐藏文件,程序退出的时候删除这个文件。这样在程序启动的时候,你判断是否存在这个文件,如果存在说明已经启动。

import java.io.File;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.channels.FileLock;/** * FileLockManager 文件锁管理 * */public class FileLockManager {    private FileLock fileLock = null;    private File file = null;    private RandomAccessFile randomAccessFile = null;    public FileLockManager(String fileName) {        this.file = new File(fileName);    }    public FileLockManager(File file) {        this.file = file;    }    /**     * 文件加锁并创建文件     *      * @return     * @throws IOException     */    public boolean Lock() throws IOException {        if (!this.file.exists()) {            this.file.createNewFile();            this.randomAccessFile = new RandomAccessFile(this.file, "rw");            this.fileLock = this.randomAccessFile.getChannel().tryLock();            if (this.fileLock.isValid()) {                return true;            } else {                return false;            }        } else {            return false;        }    }    /**     * 解锁并删除文件     *      * @return     * @throws IOException     */    public boolean unLock() throws IOException {        if (!this.file.exists()) {            return true;        } else {            if (this.fileLock != null) {                this.fileLock.release();            }            if (this.randomAccessFile != null) {                this.randomAccessFile.close();            }            if (this.file.delete()) {                return true;            } else {                return false;            }        }    }    /**     * @return Returns the fileLock.     */    public FileLock getFileLock() {        return this.fileLock;    }    /**     * @param fileLock     *            The fileLock to set.     */    public void setFileLock(FileLock fileLock) {        this.fileLock = fileLock;    }}

 

java程序在一个电脑上只启动一次,只开一个进程