【发布时间】:2014-06-26 19:45:55
【问题描述】:
我想从 Java GUI 运行 PianoBar(PianoBar 是一个从命令行运行 Pandora 的程序)。我以为这会又快又脏,但我想我对程序之间的交互了解不够。
我使用 ProcessBuilder 来启动 PianoBar 的实例,如下所示:
private Process createPianoBarProcess() throws IOException {
String[] command = {"CMD", "/C", "pianobar"};
ProcessBuilder probuilder = new ProcessBuilder( command );
probuilder.redirectErrorStream(true);
probuilder.directory(new File("~~location where pianobar.exe is~~"));
Process process = probuilder.start();
return process;
}
创建进程后,我创建一个 BufferedReader 以读取 PianoBar 输出:
Process pianoBar = createPianoBarProcess();
InputStream inS = pianoBar.getInputStream();
InputStreamReader isr = new InputStreamReader(inS);
BufferedReader br = new BufferedReader(isr);
但是当我通过这个阅读器读取 PianoBar 的输出时,它会吐出 PianoBar 的第一行(“Welcome to Pianobar (2013.05.19-win32)!Press ? for a list of commands.”),然后它吐出下一行(“[?] 电子邮件:”)。然后它就挂了。
显然,它正在等待用户输入他们的电子邮件。但无论我尝试什么,我都无法让我的 Java 程序在出现提示时将电子邮件写入 PianoBar 进程 - 它只会在读出最后一个字符时挂起。
有可能做我想做的事吗?我认为在互联网上寻找这将是一件容易的事情,但我一直无法找到任何东西。我想要的只是一种在出现提示时写入外部进程的简单方法。看起来这应该很容易......
【问题讨论】:
标签: java process processbuilder