- 我需要读取进程的输出来确保它已经启动
- 如果它已经启动,我就返回并且一切都好了
- 如果由于任何原因它没有启动,那么 while 循环将会无限制地阻塞,因为进程没有输出任何内容
有什么办法可以在我没有得到预期字符串时优雅地退出这个方法吗?
附注:我可以使用 Future 和 get 的超时来实现,但是我认为可能还有更好的方式。
public boolean startService() {
try {
ProcessBuilder pb = new ProcessBuilder("service.exe");
pb.directory(new File("C:/serviceFolder/"));
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.toLowerCase().contains("started")) {
return true;
}
}
return false; //I never get there when it fails
} catch (IOException e) {
throw new RuntimeException("Could not start the service.exe process", e);
}
}
Future
是更好的方式。 - Bohemian