【问题标题】:How to check if two instances of the same java program are running?如何检查同一个java程序的两个实例是否正在运行?
【发布时间】:2010-12-21 02:13:53
【问题描述】:

您好,我正在制作一个通过 javaw.exe 运行的程序,因此它不直接可见。现在我的问题是某个时候,(意外地)用户可能会运行同一个应用程序的多个实例,

例如输入javaw myProgram 两次

在这种情况下,如果程序已经在运行,有什么办法可以阻止同一程序的多个实例运行。

【问题讨论】:

  • 这篇文章解释了多种预防方法:rgagnon.com/javadetails/java-0288.html
  • 套接字技术有点笨拙——你需要一个完全独立的服务器进程来防止多个实例。 FileLock 技术是完全错误的,因为FileChannel.tryLock 方法只检查一个 JVM 内的重叠锁,而不是跨多个 JVM。来自 FileChannel.tryLock 的文档:“抛出 OverlappingFileLockException - 如果此 Java 虚拟机已持有与请求区域重叠的锁”
  • @CameronSkinner 谢谢,你确定在这种情况下它不会返回 null 吗?
  • 这看起来像是一个“好”欺骗的例子。答案可能相同,但询问方式不同,以至于人们在搜索另一个时可能找不到。

标签: java


【解决方案1】:

虽然文件锁定可能是最简单和最简单的选项,但我想提一个替代方案:JIntellitype 是一个仅适用于 Windows 的库,并且具有 utility method 来检查具有给定标题的应用程序窗口已经在运行了。

如果碰巧您可以仅在 Windows 上使用此功能并且使用文件锁定对您不起作用... :)

【讨论】:

  • 感谢 Jintellitype 的道具。虽然它只是 Windows,但它使用 Windows API 来保证两个实例没有运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 2013-05-24
相关资源
最近更新 更多