2014-01-23 21 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