【问题标题】:Java - only allow once instance of application [duplicate]Java - 只允许一次应用程序实例[重复]
【发布时间】:2010-08-26 18:31:50
【问题描述】:

可能的重复:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?

什么是实现这一目标的好方法?我已经阅读了涉及绑定到端口的方法。这会干扰使用相同方法的其他应用程序吗?

【问题讨论】:

标签: java instance port


【解决方案1】:

绑定到端口不好。尝试启动应用程序并重置网络适配器,看看会发生什么。其他应用程序也可能需要使用该端口。

我认为最好对外部资源(例如文件)实施锁定,但必须注意:如果 pc 重新启动或类似情况,则有必要检测过时的锁定。

您检查过 Apache commons 或 JBoss 项目了吗?我敢打赌必须有一个图书馆才能正确地做到这一点。

【讨论】:

    【解决方案2】:

    仅当他们使用相同的端口时,并且有很多端口。只是不要使用其中一种常见的。

    有些软件也会使用某种锁定文件。因此,如果存在,第二个实例将不会启动。

    【讨论】:

      【解决方案3】:

      一般概念是您定义一个 TCP 端口,然后在应用程序启动时将其绑定(侦听器/服务器)。如果您未能绑定到它,那么您知道您的应用程序的另一个实例已经在运行。

      如果另一个应用程序将同一端口用于其他用途(或用于相同目的),那么这将失败。因此,将要使用的端口放在可执行文件之外的配置文件中是有意义的,以便可以将其配置为使用相关机器上尚未使用的端口。

      【讨论】:

        【解决方案4】:

        您确实可以将ServerSocket 绑定到特定的 TCP/IP 端口。如果该端口已被使用,bind 将抛出 IOException

        此方法不会干扰使用相同方法的其他应用程序,除非另一个应用程序碰巧打开了相同的端口(TCP/IP 端口由 16 位数字标识)。所以你应该选择一个固定的端口号,并希望没有其他应用程序偶然使用相同的端口号。

        请注意,在 Windows 上,您可以使用命令 netstat 查看哪些端口被哪些可执行文件使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-29
          • 2012-08-31
          • 2016-05-07
          • 1970-01-01
          • 1970-01-01
          • 2012-08-27
          • 1970-01-01
          相关资源
          最近更新 更多