以下のコードでサービス(プロセス)を起動しています。私の問題は次のとおりです。
- プロセスの出力を読み取って、プロセスが開始されたことを確認する必要があります
- それが始まったら、私は戻って、すべてが大丈夫です
- なんらかの理由で開始されない場合、プロセスは何も出力せずにハングするため、whileは永久にブロックされます
期待される文字列が得られない場合に、メソッドを正常に終了する方法はありますか?
ps: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);
}
}