gpt4 book ai didi

Java 一直等待 getRuntime().exec

转载 作者:行者123 更新时间:2023-12-02 03:26:09 27 4
gpt4 key购买 nike

我正在我的程序中构建某种更新程序功能。当检测到更新时,程序应下载 updater.jar 并终止。之后,updater.jar 将下载该程序的新版本并删除旧版本。这就是我的主程序运行更新程序的方式:

Runtime.getRuntime().exec("java.exe -jar updater.jar "+updateURL+" "+workingPath);
System.exit(0);

但是,由于某种原因,在更新程序完成之前不会调用 System.exit(0)...并且更新程序无法删除主程序的旧版本当它运行时。结果:一切都开始挂起

有人知道如何告诉我的主程序/不/在调用System.exit(0)之前等待更新程序终止吗?

编辑:

FileUtils.copyURLToFile(url, file);
System.out.println("Downloading updater...");
new Thread() {
public void run() {
try {
Runtime.getRuntime().exec("java.exe -jar updater.jar "+updateURL+" "+workingPath);
} catch (IOException ex) {
System.out.println("Exception: " + ex.getMessage());
}
}
}.start();
System.out.println("Shutting down application.");
System.exit(0);

Cmd 显示“正在关闭应用程序。”,但 jar 似乎不会关闭,直到我手动终止该进程。

最佳答案

我认为你可以使用 ProcessBuilder像这样;

String[] cmd = { "java.exe", "-jar", "updater.jar", updateURL, workingPath };
ProcessBuilder pb = new ProcessBuilder(cmd);
try {
Process p = pb.start();
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);

您也可以使用SwingUtilitiesinvokeLater()像这样

javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Runtime.getRuntime().exec(
"java.exe -jar updater.jar " + updateURL + " "
+ workingPath);
}
}
);

关于Java 一直等待 getRuntime().exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906018/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com