gpt4 book ai didi

java - 如何让 Runtime.exec() "take over"调用控制台的应用程序直到完成?

转载 作者:行者123 更新时间:2023-12-01 10:13:20 30 4
gpt4 key购买 nike

在我的代码中,我使用 7z 命令行来提取存档

 public static void extract() {
Runtime rt = Runtime.getRuntime();
try {
Process pr = rt.exec("7za x -o"+ tempFolderStr +" "+sourceStr);
pr.waitFor();
} catch (Exception e) {
e.printStackTrace();
out("Error extracting " + sourceStr);
quit();
}

//if tempFolder doesn't exists 7zip failed to extract for whatever reason
tempFolder = new File(tempFolderStr);

if (!tempFolder.exists()){
out("Error extracting " + sourceStr);
quit();
}

source = tempFolder;
}

但是,如果文件较大,需要一段时间,那么用户可能不会明显看出这只是提取操作,还是我自己的应用程序挂起(除了提取之外,在用户之前还有很多其他事情要做)系统会提示您再次执行任何操作),而且提取本身可能会暂停,比如因为存档受密码保护或其他原因

因此,我希望 7zip “接管”控制台并显示其进度输出、提示等,直到完成,然后将控制台返回给我的应用程序,有没有办法做到这一点?

最佳答案

不要使用Runtime.exec(),使用ProcessBuilder.inheritIO():

final List<String> command = Arrays.asList(
"7za", "x", "-o", tempFolder, sourceStr
);

final ProcessBuilder pb = new ProcessBuilder(command).inheritIO();

final int retcode = pb.start().waitFor();

等等等等

关于java - 如何让 Runtime.exec() "take over"调用控制台的应用程序直到完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039100/

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