当前位置: 首页 > 面试题库 >

我没有得到任何输出,可能机器挂起了代码

弘和同
2023-03-14
问题内容

得到反馈后,我运行该程序,但在控制台中没有任何输出

import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.*;
import java.io.InputStream;

class pbdemo {

    static public void main(String[] args) throws Exception {
        String s;
        ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/f", "dir");
        pb.directory(new File("C:\\ljava"));
        try {
            Process pro = pb.start();
            pro.waitFor();
            BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));

            while ((s = br.readLine()) != null) {
                System.out.println("here we go" + s);
            }


        } catch (Exception e) {
            System.out.println("sorry" + e);
        }
    }
}

程序运行,但不输出。


问题答案:

pro.waitFor();是一种阻止方法。它会等到进程退出后再返回。这样做的问题是,许多程序只有在读取/清除标准输出缓冲区后才会退出,这意味着,就您而言,它可能永远不会退出。

尝试这样的事情…

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class PBDemo {

    public static void main(String[] args) throws Exception {
        String s;
        ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "dir");
        pb.directory(new File("C:\\ljava"));
        pb.redirectError();
        try {
            Process pro = pb.start();
            InputConsumer ic = new InputConsumer(pro.getInputStream());
            System.out.println("...Waiting");
            int exitCode = pro.waitFor();

            ic.join();

            System.out.println("Process exited with " + exitCode);

        } catch (Exception e) {
            System.out.println("sorry" + e);
        }
    }

    public static class InputConsumer extends Thread {

        private InputStream is;

        public InputConsumer(InputStream is) {
            this.is = is;
            start();
        }

        @Override
        public void run() {
//            This is acutally a bad idea, not all process will write a new line ;)
//            BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));

            try {
                int in = -1;
                while ((in = is.read()) != -1) {
                    System.out.print((char) in);
                }
            } catch (IOException exp) {
                exp.printStackTrace();
            }
        }

    }

}


 类似资料:
  • 假设我有一个< code>json数组数组 我想将其分解为<code>ArrayList

  • 问题内容: 我有一个用于Linux的Python程序,几乎像这样: 程序挂在此行: 而这种情况发生在保持更新输出的工具中,例如“ Top” 我最好的尝试: 它比第一个更好(它已经发了声),但是返回了: 第二次审判: 与第一个相同。由于“ readlines()”而挂起 它的返回应该是这样的: 并保存在变量“ process”中。我知道吗,我现在真的很困吗? 问题答案: 类似于尾巴的解决方案,仅打印

  • 我已经实现了ThreadPoolExecutor来调用任务。而且,由于核心/队列大小的错误配置,任务似乎挂起在I/O上。我想拉出挂起的线程,以便队列中的其他线程开始执行。 有没有办法列出threadpoolexecutor中的线程并拉出挂起的线程?

  • 在C:\用户\戴尔\桌面\项目\my-app中创建新的React应用。 安装包。这可能需要几分钟。使用cra模板安装反应、反应-多姆和反应-脚本... NPM ERR!最大调用堆栈大小超过npm ERR!超出最大调用堆栈大小 NPM ERR!此运行的完整日志可以在npm ERR中找到!C:\用户\戴尔\AppData\漫游\npmcache_logs\2020-09-05T07_43_27_276

  • 在运行与ignite CacheEvents程序相关的github示例时,没有得到任何输出(示例链接:https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/datagrid/cacheEventsexample.java)。有人能帮我做这件事吗? 运行时生成的日志

  • 这个程序创建了一个名为datafile.txt的文件,并且应该使用文本I/O将100个随机创建的整数写入文件中。但是,我的输出是“java.util.Random@30c221”100次。我如何得到100个随机数?提前谢谢。