从流程中打印Java InputStream

UPDATE: I found a crucial part to why this probably isn't working! I used System.setOut(out); where out is a special PrintStream to a JTextArea


这是代码,但是我遇到的问题是,只有在我结束流程后,信息才会打印出来。


public Constructor() {

    main();

}


private void main() {

    btnStart.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            try {

                ProcessBuilder builder = new ProcessBuilder("java", textFieldMemory.getText(), "-jar", myJar);

                Process process = builder.start();

                InputStream inputStream = process.getInputStream();

                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream), 1);

                String line;

                while ((line = bufferedReader.readLine()) != null) {

                    System.out.println(line);

                }

                inputStream.close();

                bufferedReader.close();

            } catch (IOException ioe) {

                ioe.printStackTrace();

            }

        }

    });

电流输出:


Line 1

Line 2

Line 3

Line 4

Line 5

这是正确的输出,但是当我结束该过程时,它只是作为一个大块打印。


有人知道这个问题是什么吗?如果可以的话,您能帮我解释一下为什么会发生这种情况吗,谢谢。


开满天机
浏览 252回答 2
2回答

湖上湖

在单独的线程中处理进程的输出流可能会有所帮助。您还想明确地等待该过程结束,然后再继续执行逻辑操作:ProcessBuilder builder = new ProcessBuilder("java",        textFieldMemory.getText(), "-jar", myJar);final Process process = builder.start();final Thread ioThread = new Thread() {    @Override    public void run() {        try {            final BufferedReader reader = new BufferedReader(                    new InputStreamReader(process.getInputStream()));            String line = null;            while ((line = reader.readLine()) != null) {                System.out.println(line);            }            reader.close();        } catch (final Exception e) {            e.printStackTrace();        }    }};ioThread.start();process.waitFor();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java