2013-07-17 168 views
0

我正在尝试为我的应用程序构建一个简单的自动更新程序。我目前正在根据远程版本检查本地应用程序版本。如果有更新的版本,我想启动我的updater.jar - 基本上下载并替换旧的应用程序。从Java应用程序内运行jar

我的问题是,我似乎无法得到updater.jar开始,如果有一个新版本。

我目前使用的代码是:

Runtime runtime = Runtime.getRuntime(); 
try { 
    Process proc = runtime.exec("java -jar updater.jar"); 
} catch (IOException ex) { 
    Logger.getLogger(Splash.class.getName()).log(Level.SEVERE, null, ex); 
} 
System.exit(0); 

退出应用程序,但updater.jar从未推出..

任何想法?

+0

是异常的catch块输入(即是有记录日志信息)? – hmjd

回答

0

当您的父进程退出时,您的子进程可能会退出。

当你启动一个过程,你平时应该:

  1. 消耗标准输出/标准错误与子进程。如果你不要这样做你的子进程可以阻止等待它的输出被消耗。你应该在单独的线程中使用。见this answer更多细节
  2. 使用Process.waitFor()从子进程

在我看来捕捉退出代码就像你要酿出更新,让它进行下载,然后退出你的父进程。任何更复杂的将可能是依赖于平台(例如产卵一个后台进程和disowning它)

+0

是啊,即时通讯类型的卡住如何将代码启动updater.jar看起来像?尝试了一堆不同的东西不能得到任何工作 – Alosyius

+0

AFAICT,你不能让孩子在父母死在Java后生活。自动更新Java软件可能是主要的PITA(甚至像IntelliJ IDEA(http://jetbrains.com/idea)这样的大型软件产品)(如果还没有的话) - 在成功更新后很难重新启动;无论如何,我打赌他们为这些目的提出了一些特定平台)。 – incarnate

0

也许路径updater.jar应在java -jar命令来指定。

相关问题