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/49609931/

相关文章:

java - 如何为JUNIT开源做贡献

java - 深度优先搜索遇到 java.lang.OutOfMemoryError

python - Django "Singleton model"存储用户设置

mono - 如何在单声道下强制应用程序的单个实例?

java - 播放响亮声音的自动音量控制

Java Debugger 运行应用程序而不会中断

java - Google App Engine getCurrentUser() 返回 null

java - 运行一个 java 应用程序实例

clickonce - 找到正在运行的clickon部署的单实例应用程序?

wpf - 如何以编程方式重新启动单实例应用程序