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; } }