我在file.bat
3运行中有5个服务,2个已停止。我希望有3个成功的绿色测试和2个红色
我认为问题出在我的var ligne
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Cmd {
static String a = null;
static String ligne = "";
public final String output = null;
static String CHEMIN = "vvvvvvvvvv";
private static BufferedReader getOutput(Process p)
{
return new BufferedReader(new InputStreamReader(p.getInputStream()));
}
private static BufferedReader getError(Process p)
{
return new BufferedReader(new InputStreamReader(p.getErrorStream()));
}
static public String Stateprocess()
{
if (ligne.contains("RUNNING")) {
a = "RUNNING";
System.out.println("ok");
} else {
a = "STOPPED";
System.out.println("no");
}
return a;
}
public boolean ping(String CHEMIN)
{
int exitValue = 1;
try {
String[] commande = {"cmd.exe", "/C", CHEMIN + "test-sc.bat"};
Process p = Runtime.getRuntime()
.exec(commande);
BufferedReader output = getOutput(p);
BufferedReader error = getError(p);
while ((ligne = output.readLine()) != null) {
System.out.println(ligne);
// System.out.println(ligne.contains("STOPPED"));
}
while ((ligne = error.readLine()) != null) {
System.out.println(ligne);
}
exitValue = p.waitFor();
}
catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return exitValue == 0;
}
public static void main(String[] args)
{
Cmd exemple = new Cmd();
boolean trouve = exemple.ping(CHEMIN);
System.out.println(trouve);
}
}
答案 0 :(得分:0)
此代码保持从out和err流中读取,直到到达流的末尾。但这会让你的java代码等到进程完成它的任务。
所以,如果这是你想要的,我建议移动声明
exitValue = p.waitFor();
在你读取流的两个while循环之前。
这可以让您确保两个流都完全写入。