2010-11-08 40 views
5

我正在使用java創建的桌面應用程序中工作。我們正在爲應用程序的windows版本(用於在Windows O.S.上運行)工作。當我們運行我們的應用程序,它通過使用系統匣作爲在java中爲系統托盤創建單個實例

SystemTray tray = SystemTray.getSystemTray(); 

我創建的系統盤,其中我創建的主類的應用程序的單一實例創建的桌面托盤圖標。

我正在爲我的應用程序創建exe文件。我的問題是當我運行我的應用程序的exe文件時,它每次都會創建托盤圖標。

我想在我的應用程序中只有一個托盤圖標出現在桌面上並作爲服務運行。只有在卸載應用程序時才能刪除此圖標。它應該在後臺運行。

我沒有得到任何幫助我將應用程序作爲服務運行的方式,並且應該只有一個實例在後臺運行。

我想通過創建托盤圖標作爲服務來運行我的應用程序,並且應該有單個實例。請在這個問題上指導我。

感謝您提前提出所有寶貴建議。

回答

2

正如Mudassir所說,當您啓動您的程序時,您應該添加一個檢查程序,試圖找到您的應用程序的另一個正在運行的實例。這可以通過在啓動時創建特定文件並在關閉時刪除它來完成。如果在啓動應用程序時該文件已經存在,則意味着另一個實例正在運行。 您也可以使用進程間通信,但這比簡單的文件更困難。

對於「服務」部分,您可以在啓動時隱藏主窗口,這樣您的應用程序就會像運行Windows服務一樣運行。

+0

感謝您的回答,我希望這會對我有用。請詳細說明服務部分。 – Toman 2010-11-08 14:29:20

+0

我不認爲有可能在Java中創建Windows服務,這意味着可以在啓動時自動運行的服務以及可以像其他標準Windows服務一樣管理的服務。 但你可以通過在註冊表中添加一個條目來做類似的事情(谷歌類似「windows自動啓動」)。當你的程序啓動時,它會檢查另一個實例是否正在運行。如果沒有,它會創建一個你想要的系統托盤圖標,並隱藏它的窗口(如果它實際上使用某種GUI)。 – 2010-11-08 15:04:42

1

使您的應用程序單實例。並且請告訴你如何在Java中創建一個.EXE文件?

+0

感謝您回答Mudassir。我正在使用高級安裝程序創建exe文件。高級安裝程序使用jar文件並從jar中創建exe文件。 – Toman 2010-11-08 13:02:07

1

要顯示托盤圖標,您的應用必須正在運行。如果您的托盤圖標出現兩次(或更多),則比您的應用程序多次運行。你必須自己添加一個檢查。

您不想將您的應用程序作爲Windows服務運行,因爲這些服務通常無法訪問Windows桌面。

+0

您不想將您的應用程序作爲Windows服務運行,因爲這些服務通常無法訪問Windows桌面。 可能是Toman試圖製作一些反病毒類型的程序,它在後臺運行,並通過系統托盤圖標顯示它們的存在。 – Mudassir 2010-11-08 12:06:06

+0

@Mudassir在這種情況下,他應該製作兩個應用程序。一個用於windows後臺服務,另一個用於連接網絡或其他用戶。 – ZeissS 2010-11-08 12:10:58

+0

感謝您的意見。我的應用程序用於進行在線備份。它會自動備份所選文件並在服務器上自動更新,因此需要它在後臺作爲服務運行。我在應用程序的主類中爲系統托盤創建單個實例,但我的應用程序無法識別是否存在任何實例。 – Toman 2010-11-08 13:09:41