我希望从Java GUI中运行PianoBar(PianoBar是一个在命令行下运行Pandora的程序)。我原以为这会很快,但我猜我不太了解程序之间的交互。
我使用ProcessBuilder来启动PianoBar的实例,如下所示:
但是当我通过这个读取器阅读PianoBar的输出时,它会输出PianoBar的第一行(“欢迎来到pianobar(2013.05.19-win32)!按?获取命令列表。”),然后输出下一行(“[?]电子邮件:”)。然后就卡住了。
显然,它正在等待用户输入他们的电子邮件。但无论我尝试什么,都不能让我的Java程序在提示时将电子邮件写入PianoBar进程 - 一旦它读出最后一个字符,它就会卡住。
我正在尝试做的事情可能是可行的吗?我认为这应该是在互联网上容易寻找的东西,但我一直没有找到任何信息。我想要的只是一种在提示时轻松写入外部进程的方法。似乎这应该很容易...
我使用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的第一行(“欢迎来到pianobar(2013.05.19-win32)!按?获取命令列表。”),然后输出下一行(“[?]电子邮件:”)。然后就卡住了。
显然,它正在等待用户输入他们的电子邮件。但无论我尝试什么,都不能让我的Java程序在提示时将电子邮件写入PianoBar进程 - 一旦它读出最后一个字符,它就会卡住。
我正在尝试做的事情可能是可行的吗?我认为这应该是在互联网上容易寻找的东西,但我一直没有找到任何信息。我想要的只是一种在提示时轻松写入外部进程的方法。似乎这应该很容易...