我正在使用一种常见的解决方案,即使用 BufferedReader 类来获取输入流,但似乎如果我可以看到命令控制台在应用程序运行时打开,我无法获取其中的内容,没有数据在变量中,它卡在 readline() 步骤,肯定是因为应用程序不断运行时数据没有刷新
public static void executeCommandOnLocalMachine(ProcessBuilder builder) throws Exception {
builder.redirectErrorStream(true);
Process process = builder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = reader.readLine();
while (line != null) {
Log.info(line);
if(line.toLowerCase().contains("started"))
break;
line = reader.readLine();
}
}
呼叫者
public static String START_APPLICATION_MANAGER_COMMAND ="cd /D %VARENV%/../Application && start java -jar application.jar";
public static void startApplicationManager() throws Exception {
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/C", GeneralConstants.START_APPLICATION_COMMAND);
ProcessManager.executeCommandOnLocalMachine(builder);
}
如果您使用 cmd
start
,cmd 会在一个全新的窗口中启动该进程,因此要访问进程输出,只需关闭 start
即可。