我想从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的第一行(“欢迎来到pianobar(2013.05.19-win32)!”按?获取命令列表。“),然后它吐出来出下一行(“[?]电子邮件:”)。然后它就会挂起。
显然,它正在等待用户输入他们的电子邮件。但无论我尝试什么,我都无法让我的Java程序在提示时将电子邮件写入PianoBar进程 - 只要它读出最后一个字符就会挂起。
有可能做我想做的事吗?我认为在互联网上寻找是件容易的事,但我找不到任何东西。我想要的只是在提示时写入外部进程的简单方法。看起来这应该很容易......
答案 0 :(得分:0)
您可以使用以下代码段来开始工作:
String s;
//s = email
BufferedWriter bufferedwriter = new BufferedWriter(new OutputStreamWriter(pianoBar.getOutputStream()));
bufferedwriter.write(s);
bufferedwriter.flush();
完成! 请记住使用适当的try / catch
包围代码块