Java readLine()使用Runtime.exec和BufferedStream挂起最后一行

Java readLine()使用Runtime.exec和BufferedStream挂起最后一行,java,readline,Java,Readline,我正在使用本文中提到的正确做法: 我同时读取输出和错误流。但是,在读取进程的输出流时,它挂起在最后一行之后的readLine()上。我不知道如何解决这个问题。这是过程的主线,它就挂在那里 挂起此命令的命令是paexec\192.168.1.92-c-f c:\Windows\ITBBsync0.bat 批处理文件中有以下几行:devcon.exe status=USB>C:\Windows\output.txt 当我在命令行上执行它时,进程退出,代码为0。当我在Java中执行它时,它在读取输出

我正在使用本文中提到的正确做法:

我同时读取输出和错误流。但是,在读取进程的输出流时,它挂起在最后一行之后的readLine()上。我不知道如何解决这个问题。这是过程的主线,它就挂在那里

挂起此命令的命令是paexec\192.168.1.92-c-f c:\Windows\ITBBsync0.bat

批处理文件中有以下几行:devcon.exe status=USB>C:\Windows\output.txt

当我在命令行上执行它时,进程退出,代码为0。当我在Java中执行它时,它在读取输出的最后一行(基本上是批处理文件的最后一行)后挂起。我认为这一过程并不存在,这就是问题发生的原因

import java.io.*;
class StreamGobbler extends Thread
{
InputStream is;
String type;

StreamGobbler(InputStream is, String type)
{
    this.is = is;
    this.type = type;
}

public void run()
{
    try
    {
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line=null;
        while ((line = br.readLine()) != null){
            System.out.println(type + ">" + line);
            //hangs after reading last line.
        }
        } catch (IOException ioe)
          {
            ioe.printStackTrace();  
          }
}
}
另外,使用StreamGobbler的方法如下所示。显然有一个父类执行这个方法

public static boolean cmd(String command){
    try{
    Runtime rt = Runtime.getRuntime();
    System.out.println("Execing " + command);
    Process p = rt.exec(command);
    // any error message?
    StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(),"ERROR");
    StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), "OUTPUT");

    errorGobbler.start();
    outputGobbler.start();


    int exitVal = p.waitFor();
    if (exitVal != 0){
        System.out.println("ExitValue: " + exitVal);        
        System.out.println(command + "EXIT CODE:" + exitVal);
        return false;
    }
    return true;
    }catch(IOException ioe){
        ioe.printStackTrace();
        return false;
    }catch(InterruptedException ie){
        ie.printStackTrace();
        return false;
    }
}
我访问了StackOverflow上的许多线程,据我所知,我正在为此使用最佳实践。请让我知道如何解决这个问题,或者为什么会发生这种情况


我不能确切地告诉您我正在执行的应用程序,因为它有点复杂,但该应用程序执行一些网络操作,还执行一个批处理文件,该批处理文件又包含更多操作。

好消息:在您完成读取之后,通过调用
close
关闭读卡器/inputStream,您确定外部进程正在退出吗?你能提供一个你正在运行的命令的例子,它会导致这个挂起吗?你用什么命令来测试它?使用
ipconfig
进行测试未生成任何错误SPAEXEC\\192.168.1.92-c-f c:\Windows\ITBBsync0.batI已编辑了有关该命令的一些详细信息