【发布时间】:2017-01-19 20:37:20
【问题描述】:
我正在尝试从 java 文件中执行外部程序 (.exe)。 到目前为止,这是我的代码:
try{
Process process = new ProcessBuilder(path).start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
catch(Exception e){e.printStackTrace();}
程序的初始输出显示在我的 java 程序的控制台窗口上,但不幸的是,它需要用户密码并按 Enter。我已经尝试实现我在互联网上找到的许多可能的解决方案,例如 .inheritIO() 或在 process-arguments 中转发命令,即 Process process = new ProcessBuilder(path,"pw","/c").start() ;但这不起作用。我不明白为什么输入流工作得很好,但任何类型的输出流似乎都不起作用。
【问题讨论】:
-
嗯,你没有提到试图打开进程的输出流(实际上它是它的输入流,从 Java 的角度来看它是一个输出流)。你试过吗?再说一遍,请记住,许多程序对密码有特殊的交互,不涉及流,而是直接读取密钥或直接访问设备。
-
我不确定,但我认为外部程序是用 java 或 c/c++ 编写的。这对我的 java 代码至关重要吗?
-
如果
inheritIO()不起作用,您可以停止。inheritIO()已经提供直接连接。如果这不起作用,则子进程根本不使用该通道,而是直接访问控制台——以一种在子进程时显然停止工作的方式。请注意,当您的应用程序从 IDE 启动时,本机控制台上的某些功能将无法正常工作。
标签: java stream processbuilder