Java 进程getInputStream()永远不会结束

Java 进程getInputStream()永远不会结束,java,makefile,Java,Makefile,在我的程序中,我试图通过Java代码执行make 以下是我清单的一部分: this.makefileGenerator.generate(); Process proc = this.makefileGenerator.runCompiler(); //this.stream.println(IOUtils.toString(proc.getInputStream())); BufferedReader reader = new BufferedReader(new InputStreamR

在我的程序中,我试图通过Java代码执行
make

以下是我清单的一部分:

this.makefileGenerator.generate();

Process proc = this.makefileGenerator.runCompiler();

//this.stream.println(IOUtils.toString(proc.getInputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = reader.readLine()) != null)
    System.out.println("\n" + line);

try {
    int result;

    if ((result=proc.waitFor()) == 0)
        this.stream.println("Done!");
    else {
proc.getInputStream()调用期间,执行似乎被阻止。事实上,我的程序不会崩溃,但永远不会终止

在控制台输出中,我有:

make: Entering directory '/cygdrive/c/Users/cr01046/Documents/workspace/ocelot/jni'
gcc -shared -m32 -D__int64=int64_t -LC:/gtk/lib -lintl -mms-bitfields -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.0/include  -IC:/'Program Files'/Java/jdk1.8.0_73/include -IC:/'Program Files'/Java/jdk1.8.0_73/include/win32  -o ../Test.dll  lists.c ocelot.c EN_CBridge.c main.c -lglib-2.0  

我还尝试通过提示符抛出
make
,编译将正确终止(但是,有几个警告)。我不明白为什么在这种情况下,
make
可以工作,而通过Java它不会终止

如果编译生成警告,但从Java运行时看不到警告,则警告将写入STDERR,并且您没有使用STDERR。根据错误输出的数量,当缓冲区满时,make进程可能已停止


如果
进程
是使用创建的,则应调用以将错误输出与标准输出合并。

如何知道它在
getInputStream()中被阻止?我会将这组嵌套调用拆分为单独的语句,以确认它被阻止的位置。您的
System.out.println
指令似乎正常工作,因此问题不在读卡器创建部分。实际上,我的
make
进程因STDERR上的大量警告而暂停。谢谢你的解释