Javaアプリケーションの複数のインスタンスを起動しないようにする 質問する

Javaアプリケーションの複数のインスタンスを起動しないようにする 質問する

ユーザーが Java アプリケーションを複数回並行して実行することを防ぎたいです。

これを防ぐために、アプリケーションを開くときにロック ファイルを作成し、アプリケーションを閉じるときにロック ファイルを削除します。

アプリケーションの実行中は、jar の別のインスタンスを開くことはできません。ただし、タスク マネージャーを使用してアプリケーションを強制終了すると、アプリケーションのウィンドウを閉じるイベントはトリガーされず、ロック ファイルは削除されません。

ロック ファイル メソッドが機能することを確認するにはどうすればよいですか、または他にどのようなメカニズムを使用できますか?

ベストアンサー1

FileLock を使用することもできます。これは、複数のユーザーがポートを共有する環境でも機能します。

String userHome = System.getProperty("user.home");
File file = new File(userHome, "my.lock");
try {
    FileChannel fc = FileChannel.open(file.toPath(),
            StandardOpenOption.CREATE,
            StandardOpenOption.WRITE);
    FileLock lock = fc.tryLock();
    if (lock == null) {
        System.out.println("another instance is running");
    }
} catch (IOException e) {
    throw new Error(e);
}

ガベージ コレクションも生き残ります。プロセスが終了するとロックが解除されます。通常の終了、クラッシュなど、何であっても問題ありません。

おすすめ記事