Java - 只允许一个应用程序实例

时间:2010-08-26 18:31:51

标签: java instance port

  

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

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

4 个答案:

答案 0 :(得分:3)

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

我认为最好在外部资源(例如文件)上实现锁定,但必须小心:如果pc重新启动或类似的东西,则需要检测过时的锁定。

您是否检查过Apache commons或JBoss项目?我打赌必须有一个库来正确地做到这一点。

答案 1 :(得分:1)

只有当他们使用相同的端口时,才会有很多端口。只是不要使用常见的一种。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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