退出后,Java程序在控制台上不显示为已停止

时间:2016-08-17 22:35:19

标签: java processbuilder

我有一个自我更新的Java应用程序。此应用程序下载它的新版本,使用ProcessBuilder类在下载后启动新版本,并告诉JVM在JVM退出后删除旧版本。发布的代码如下:

ProcessBuilder pb = null;
if (deleteOldVersion) {
    try {
        String path = UpdateChecker.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String decodedPath = URLDecoder.decode(path, "UTF-8");
        log.getLogger().info("The following file will be deleted, once the JVM exits: " + decodedPath);
        (new File(decodedPath)).deleteOnExit();
    } catch (UnsupportedEncodingException e) {
        log.getLogger().log(Level.SEVERE, "An error occurred", e);
    }
}

log.getLogger().info("Launching new version using command: java -jar " + destFolder + File.separator + destFilename);
pb = new ProcessBuilder("java", "-jar", destFolder + File.separator + destFilename).inheritIO();
pb.start();
System.exit(0);

新进程应该按原样启动,并且它继承标准输出,但是当我退出新版本的应用程序时,命令行永远不会将进程显示为已完成: console image after shutdown

没有剩下的线程正在运行,出于某种奇怪的原因,我无法在eclipse中或正常启动新版本时重现该行为。

这里出了什么问题?我知道遗漏.inheritIO()会有所帮助,但我真的想在新版本中使用相同的标准。

0 个答案:

没有答案