2014-01-23 22 views
1

我的代碼旨在自動更新我的Jar應用程序。我想通過參數從我的應用程序運行Jar文件,告訴新版本進行一些更新後的清理,然後退出。我可以使用Desktop.open()啓動它,但我無法以這種方式傳遞任何參數。我也可以launch the java executable using ProcessBuilder但是在Windows上,我想使用javaw,而在其他平臺上,我將要使用java。有沒有辦法做到這一點,而不必擔心目前的平臺?在任何平臺上從代碼啓動Jar文件

+0

不會'Runtime.getRuntime()。exec(「javaw -jar file.jar」);'做這個工作嗎? – Selim

+0

@Selim它與我需要在Windows上使用'javaw'和在其他平臺上使用'java'相同的問題。 – Fr33dan

+0

你總是可以使用System.getenv()或其他方法來獲取數據,這些數據會告訴你(通過一些分析)你所在的操作系統。 (從來沒有想過爲什麼Java的存檔爲什麼不能直接獲取這些信息。) –

回答

0

我會考慮從不同的方向來解決這個問題:有一個包裝器工具,它創建一個ClassLoader,使用它來加載jar並執行它。當新版本變得可用時,通知包裝使用jar的新實例再次執行此操作,然後關閉。這將讓前一個ClassLoader超出範圍,並讓它和它從前一個jarfile加載的類被垃圾收集。

+0

這是一個聰明的想法,但爲了這個工作,我將不得不分發兩個jar文件給我的用戶最初。包裝器和主應用程序的當前版本。 – Fr33dan

+0

是的。但是,無論如何,典型的應用程序都帶有一堆支持jar,所以... – keshlam