java - 如何实现单实例 Java 应用程序?

标签 java single-instance

有时我看到许多应用程序,例如 msn、windows media player 等都是单实例应用程序(当用户在应用程序运行时执行时,不会创建新的应用程序实例)。

在 C# 中,我为此使用 Mutex 类,但我不知道如何在 Java 中执行此操作。

最佳答案

我在main方法中使用如下方法。这是我见过的最简单、最健壮、侵入性最小的方法,所以我想我会分享它。

private static boolean lockInstance(final String lockFile) {
    try {
        final File file = new File(lockFile);
        final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
        final FileLock fileLock = randomAccessFile.getChannel().tryLock();
        if (fileLock != null) {
            Runtime.getRuntime().addShutdownHook(new Thread() {
                public void run() {
                    try {
                        fileLock.release();
                        randomAccessFile.close();
                        file.delete();
                    } catch (Exception e) {
                        log.error("Unable to remove lock file: " + lockFile, e);
                    }
                }
            });
            return true;
        }
    } catch (Exception e) {
        log.error("Unable to create and/or lock file: " + lockFile, e);
    }
    return false;
}

关于java - 如何实现单实例 Java 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/177189/

相关文章:

java - APACHE POI EXCEL XmlException : is an invalid XML character, 有没有办法预处理excel文件?

c# - 强制 TopShelf 服务的单个实例

android - 如何创建一个共享首选项的单个实例,它可以在 flutter 的整个项目中使用

windows - 单实例批处理文件?

c++ - 关于单例

java - FQL照片查询

java - 检测循环引用

.net - 使用多个文件作为资源管理器的参数打开程序一次

java - 将空字符串解析为 SimpleDateFormat

java - 通过 JMX 获取进程 ID