可能重复:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?
实现这一目标的好方法是什么?我已阅读涉及绑定到端口的方法。这是否会使用相同的方法干扰其他应用程序?
答案 0 :(得分:3)
绑定到端口不好。尝试启动应用程序并重置网络适配器,看看会发生什么。其他应用程序也可能需要使用该端口。
我认为最好在外部资源(例如文件)上实现锁定,但必须小心:如果pc重新启动或类似的东西,则需要检测过时的锁定。
您是否检查过Apache commons或JBoss项目?我打赌必须有一个库来正确地做到这一点。
答案 1 :(得分:1)
只有当他们使用相同的端口时,才会有很多端口。只是不要使用常见的一种。
某些软件也会使用某种锁文件。因此,如果第二个实例存在则不会启动。
答案 2 :(得分:0)
一般概念是您定义TCP端口,然后在应用程序启动时绑定(侦听器/服务器)。如果您无法绑定它,那么您知道应用程序的另一个实例已在运行。
如果另一个应用程序使用相同的端口用于其他东西(或用于相同的目的),那么这将失败。因此,将端口用于可执行文件外部的配置文件中是有意义的,这样就可以将其配置为使用尚未在相关计算机上使用的端口。
答案 3 :(得分:0)
您确实可以将ServerSocket
绑定到特定的TCP / IP端口。如果该端口已被使用,bind
将抛出IOException
。
此方法不会干扰使用相同方法的其他应用程序,除非另一个应用程序碰巧打开相同的端口(TCP / IP端口由16位数字标识)。因此,您应该选择一个固定的端口号,并希望没有其他应用程序偶然使用相同的端口号。
请注意,在Windows上,您可以使用命令netstat
查看哪些端口正在使用哪些可执行文件。