Java 尝试读取进程的输出消息时代码卡住

Java Code stucking when attempt read output messages of Process

我使用 ProcessBuilder 在我的启动和停止 Derby Network Server 应用程序中执行 cmd 命令。但是出了点问题,我找不到问题出在哪里。让我解释一下;

正在启动网络服务器;

//Defining path of db files located
File file= new File(FirstTimeMainFrame.class.getProtectionDomain()
                        .getCodeSource()
                        .getLocation()
                        .getPath().replace(new File(FirstTimeMainFrame.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName(), "").replace("%20", " "));

String path = file+"\DB";

//Process Creating
ProcessBuilder builder = new ProcessBuilder();
Process process = null;
String[] command = new String[3];

command[0] = "cmd.exe";
command[1] = "/c"; //This things say to CMD close when commands complete.
command[2] = "cd "+path+" && java -jar derbyrun.jar server start";
builder = new ProcessBuilder(command[0], command[1], command[2]);
builder.redirectErrorStream(true);
process = builder.start();

//Reading CMD outputs
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
  while (true) {
     line = br.readLine();
     if (line == null) { break; }
     System.out.println(line);
  }

当我调试项目时,我看到两行输出,当 While 循环第三次检查时,调试卡在 line = br.readLine();。整个程序卡住,无法继续。

输出;

Fri Dec 25 20:54:36 EET 2015 : Security manager installed using the Basic server security policy.
Fri Dec 25 20:54:36 EET 2015 : Apache Derby Network Server - 10.12.1.1 - (1704137) started and ready to accept connections on port 1527

重要 P.S.: 如果我删除 //Reading CMD outputs codes 一切正常。服务器启动、数据库创建、表创建等

我也直接在 Windows 下尝试了相同的 CMD 命令。当我执行命令时,写了两行命令提示符 window 停留在闪烁的光标处(我认为没有关闭或完成)但是 Derby Server 以编程方式或直接在 Windows.[= 中启动没有问题18=]

场景中实际上有两个 运行ning 进程:从 java 代码启动的 CMD 进程和由 CMD 生成的 Derby 服务器进程。

Derby 服务器进程的输出被定向到命令行,然后可以在 java 代码中读取。服务器进程可以 运行 无限长直到它被终止,这就是输出流永远不会结束的原因。

挂起 java 代码是因为此时流中没有可用字节 - 服务器进程告诉您它已成功初始化,然后进入等待状态。