Java启动程序并以编程方式与之交互

Java启动程序并以编程方式与之交互,java,process,io,Java,Process,Io,我有一个(Windows)命令行应用程序,启动时会提示您输入密码,然后打印一些文本。不幸的是,我不拥有应用程序的源代码,并且在启动应用程序时应用程序不接受任何参数(即,启动应用程序时无法传递密码)。我需要以Java编程方式启动应用程序,并向其发送密码,然后读取响应。虽然我成功地启动了其他程序(只有输出),但我似乎无法从这个应用程序中捕获任何输出。以下是我的Java代码: 您是否得到错误流中的任何错误?可能会有帮助。在这种情况下,它应该包括一个你试图听的程序的模拟。不,没有错误。另外,当我运行v

我有一个(Windows)命令行应用程序,启动时会提示您输入密码,然后打印一些文本。不幸的是,我不拥有应用程序的源代码,并且在启动应用程序时应用程序不接受任何参数(即,启动应用程序时无法传递密码)。我需要以Java编程方式启动应用程序,并向其发送密码,然后读取响应。虽然我成功地启动了其他程序(只有输出),但我似乎无法从这个应用程序中捕获任何输出。以下是我的Java代码:


您是否得到错误流中的任何错误?可能会有帮助。在这种情况下,它应该包括一个你试图听的程序的模拟。不,没有错误。另外,当我运行vbscript脚本并执行程序时,我确实会得到标准输出,因此我知道应用程序会写入标准输出。我想我应该补充一点,我是在Eclipse中运行代码的,以防万一。请参阅
import java.io.IOException;
import java.io.InputStream;
import java.lang.ProcessBuilder.Redirect;

public class RunCommand {

    public static void main(String[] args) throws Exception {
        new RunCommand().go();
    }

    void go() throws Exception {
        ProcessBuilder pb = new ProcessBuilder("executable.exe");
        pb.redirectErrorStream(true); // tried many combinations of these redirects and none seemed to help
        pb.redirectInput(Redirect.INHERIT);
        pb.redirectOutput(Redirect.INHERIT);
        pb.redirectError(Redirect.INHERIT);
        Process process = pb.start();

        final Thread reader = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    final InputStream is = process.getInputStream();
                    int c;
                    while ((c = is.read()) != -1) {
                        // never gets here because c is always = -1
                        System.out.println((char) c);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        reader.start();

        boolean cont = true;
       while (cont) {
           // force this to continue so we can try and get something from the input stream
       }

       process.destroyForcibly();
    }

}