ProcessBuilder不显示输出流(如果是java)
我得到了一个代码,如果我执行类似“dir”的命令,它会成功地运行并显示输出,但是如果我运行“java-version”或来自java的其他命令,它不会显示输出。请帮助:ProcessBuilder不显示输出流(如果是java),java,processbuilder,Java,Processbuilder,我得到了一个代码,如果我执行类似“dir”的命令,它会成功地运行并显示输出,但是如果我运行“java-version”或来自java的其他命令,它不会显示输出。请帮助: public static void execJob(){ try{ ProcessBuilder pb = new ProcessBuilder("C:\\myPrograms\\jdk1.7.0_79\\bin\\java.exe", "-version"); pb.directo
public static void execJob(){
try{
ProcessBuilder pb = new ProcessBuilder("C:\\myPrograms\\jdk1.7.0_79\\bin\\java.exe", "-version");
pb.directory(new File("src"));
Process process = pb.start();
IOThreadHandler outputHandler = new IOThreadHandler(process.getInputStream());
outputHandler.start();
process.waitFor();
System.out.println(outputHandler.getOutput());
}catch(Exception e) {
System.out.println(e.toString());
}
}
private static class IOThreadHandler extends Thread {
private InputStream inputStream;
private StringBuilder output = new StringBuilder();
IOThreadHandler(InputStream inputStream) {
this.inputStream = inputStream;
}
public void run() {
Scanner br = null;
try {
br = new Scanner(new InputStreamReader(inputStream));
String line = null;
while (br.hasNextLine()) {
line = br.nextLine();
output.append(line + System.getProperty("line.separator"));
}
} finally {
br.close();
}
}
java-version
写入stderr,因此需要pb.redirectErrorStream(true)
以捕获输出
ProcessBuilder pb = new ProcessBuilder("C:\\myPrograms\\jdk1.7.0_79\\bin\\java.exe", "-version");
pb.redirectErrorStream(true);
...
首先执行e.printStacktrace而不是e.ToString,检查它是否正在写入stdout而不是stderr。谢谢Elliott,但Inheritario()没有帮助。还有其他建议吗?是的,你是对的,现在正在写。实际上,我试图从命令行运行java程序,并实时显示输出,而不是显示非常重要的输出。为什么调用某个jar并显示输出不起作用,即使java版本正在运行。有什么想法吗
private static class IOThreadHandler extends Thread {
private InputStream inputStream;
private StringBuilder output = new StringBuilder();
IOThreadHandler(InputStream inputStream) {
this.inputStream = inputStream;
}
public void run() {
try (Scanner br = new Scanner(new InputStreamReader(inputStream))) {
String line = null;
while (br.hasNextLine()) {
line = br.nextLine();
output.append(line).append(System.getProperty("line.separator"));
}
}
}
public String getOutput() {
return output.toString();
}
}