从Java应用程序中运行jar

时间:2013-07-17 13:33:13

标签: java

我正在尝试为我的应用程序构建一个简单的自动更新程序。我目前正在针对我的远程版本检查本地应用程序版本。如果有更新的版本,我想启动我的updater.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永远不会启动..

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

当您启动流程时,通常应该:

  1. 从子进程中使用stdout / stderr。如果您这样做,您的子进程可能会阻止等待其输出被消耗。您应该在单独的线程中使用。有关详细信息,请参阅this answer
  2. 使用Process.waitFor()从子进程中捕获退出代码
  3. 在我看来,你想要生成更新程序,让它执行下载,然后退出父进程。任何更复杂的东西都可能与平台有关(例如,产生后台进程并将其取消)

答案 1 :(得分:0)

可能应该在java -jar命令中指定updater.jar的路径。

答案 2 :(得分:0)

从jre1.2

开始,你最好使用URLClassLoader

请参阅How to load a jar file at runtime