zsh_root
2025-12-10 8d662de2fd262b3a485f16e197cb4d0ca2a61cdf
src/home/SingleInstanceLock.java
@@ -13,65 +13,65 @@
    private static FileChannel channel;
    
    /**
     * 尝试获取应用程序锁
     * @return true-成功获取锁(第一次运行), false-获取失败(已有实例运行)
     * 尝试获取应用程序锁
     * @return true-成功获取锁(第一次运行), false-获取失败(已有实例运行)
     */
    @SuppressWarnings("resource")
   public static boolean lock() {
        try {
            // 创建文件对象
            // 创建文件对象
            File file = new File(LOCK_FILE);
            
            // 如果文件存在但无法删除,可能是其他实例正在运行
            // 如果文件存在但无法删除,可能是其他实例正在运行
            if (file.exists() && !file.delete()) {
                return false;
            }
            
            // 创建文件并获取通道
            // 创建文件并获取通道
            RandomAccessFile raf = new RandomAccessFile(file, "rw");
            channel = raf.getChannel();
            
            // 尝试获取独占锁
            // 尝试获取独占锁
            lock = channel.tryLock();
            
            // 如果获取到锁,返回true
            // 如果获取到锁,返回true
            return lock != null;
        } catch (IOException e) {
            // 发生异常说明可能已有实例运行
            // 发生异常说明可能已有实例运行
            return false;
        }
    }
    
    /**
     * 释放应用程序锁
     * 释放应用程序锁
     */
    public static void release() {
        try {
            // 释放锁
            // 释放锁
            if (lock != null && lock.isValid()) {
                lock.release();
            }
            // 关闭通道
            // 关闭通道
            if (channel != null && channel.isOpen()) {
                channel.close();
            }
            // 删除锁文件
            // 删除锁文件
            File file = new File(LOCK_FILE);
            if (file.exists()) {
                file.delete();
            }
        } catch (IOException e) {
            // 释放锁时忽略异常
            // 释放锁时忽略异常
        }
    }
    
    /**
     * 检查程序是否已在运行并显示警告
     * 检查程序是否已在运行并显示警告
     */
    public static void showAlreadyRunningWarning() {
        JOptionPane.showMessageDialog(null,
            "程序已经打开,请勿重复打开",
            "警告",
            "程序已经打开,请勿重复打开",
            "警告",
            JOptionPane.WARNING_MESSAGE);
    }
}