0

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

有任何想法吗?

4

3 回答 3

0

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

当你启动一个进程时,你通常应该:

  1. 从子进程中使用 stdout/stderr。如果您这样做,您的子进程可能会阻塞等待其输出被消耗。您应该在单独的线程中使用。有关更多详细信息,请参阅此答案
  2. 用于Process.waitFor()捕获子进程的退出代码

在我看来,您想生成更新程序,让它执行下载,然后退出您的父进程。任何更复杂的东西都可能依赖于平台(例如产生一个后台进程并放弃它)

于 2013-07-17T13:39:14.703 回答
0

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

于 2013-07-17T13:54:50.970 回答
0

从 jre1.2 开始你最好使用URLClassLoader

请参阅如何在运行时加载 jar 文件

于 2013-07-17T14:01:34.533 回答