可能重複:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?爪哇 - 只允許一次應用的實例
什麼是實現一個很好的和簡單的方法?我已經閱讀了綁定到端口的方法。這會干擾使用相同方法的其他應用程序嗎?
可能重複:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?爪哇 - 只允許一次應用的實例
什麼是實現一個很好的和簡單的方法?我已經閱讀了綁定到端口的方法。這會干擾使用相同方法的其他應用程序嗎?
不好綁定到一個端口。嘗試啓動應用程序並重置網絡適配器,看看會發生什麼。其他應用程序也可能需要使用該端口。
我認爲最好在外部資源(如文件)上實現鎖定,但必須小心:如果pc重新啓動或類似的情況,則需要檢測舊鎖。
您是否檢查過Apache Commons或JBoss項目?我敢打賭,必須有一個圖書館來正確地做到這一點。
只有當他們使用相同的端口,並且有很多端口。只是不要使用其中一種常見的。
某些軟件也會使用某種鎖定文件。因此,如果第二個實例存在,它將不會啓動。
一般的概念是,您定義一個TCP端口,然後在應用程序啓動時綁定(偵聽器/服務器)。如果你無法綁定到它,那麼你知道你的應用程序的另一個實例已經在運行。
如果另一個應用程序使用相同的端口用於其他目的(或出於同一目的),那麼這將失敗。因此,將端口用於存在於可執行文件外部的配置文件是有意義的,以便可以將其配置爲使用相關機器上尚未使用的文件。
確實可以將ServerSocket
綁定到特定的TCP/IP端口。如果該端口已被使用,bind
將拋出IOException
。
此方法不會干擾使用相同方法的其他應用程序,除非另一個應用程序碰巧打開相同的端口(TCP/IP端口由16位數字標識)。所以你應該選擇一個固定的端口號,並希望沒有其他應用偶然使用相同的端口號。
請注意,在Windows上,您可以使用命令netstat
查看哪些端口正在使用哪些可執行文件。
重複發佈爲:http://stackoverflow.com/questions/177189/how-to-implement-a-single-instance-java-application – 2010-08-26 18:34:58