ProcessBuilder如果是Java,则不显示输出流

问题描述 投票:1回答:2

如果执行“ dir”之类的代码,我将获得运行并成功显示输出的代码,但是如果运行“ java -version”或其他Java命令,则不会显示输出。请帮助:

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 processbuilder
2个回答
2
投票

[java -version写入stderr,因此您需要pb.redirectErrorStream(true);捕获输出。

 ProcessBuilder pb = new ProcessBuilder("C:\\myPrograms\\jdk1.7.0_79\\bin\\java.exe", "-version");
 pb.redirectErrorStream(true);
 ...

0
投票
                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();
                }
        }````
© www.soinside.com 2019 - 2024. All rights reserved.