2012-08-01 102 views
0

我想从使用ProcessBuilder的Java应用程序运行交互式可执行文件;它应该接受输入,产生输出,然后等待下一个输入。这里输入/输出流的主要问题。我发送一个输入并且什么也没得到。下面是代码:使用ProcessBuilder从Java Interactive Process读取InputStream

private static Process process; 
private static BufferedReader result; 
private static PrintWriter input; 

process = new ProcessBuilder("compile-lm", lmFile.toString(), " --score yes").redirectErrorStream(true).start(); 

input = new PrintWriter(new OutputStreamWriter(process.getOutputStream()), true); 
input.println(message); 
System.out.println(message); 

result = new BufferedReader(new InputStreamReader(process.getInputStream())); 
String line = new String(); 

while ((line = result.readLine()) != null) 
{ 

/* Some processing for the read line */ 

System.out.println("output:\t" + line); 
} 
+0

如果你有退出状态尝试使用'int es = process.waitFor(); '并显示它到什么问题 – zizoujab 2012-08-01 09:49:35

+0

@ZiedJaballah我试图在正确的操作'input.println(message)'之后获得退出状态并且它是0“正常终止”。还有什么我可以尝试调查问题在哪里? – asadek 2012-08-01 10:43:14

+0

尝试更改命令。代码听起来很干净。也许你没有得到一个输出,只是因为这个命令没有任何回报。 – zizoujab 2012-08-03 17:09:29

回答

0

我使用了一个类似的设置过很多次,但现在还不能找到一份工作:(我的第一本能虽然是移动,你初始化读者线(结果变量)在你发送命令到进程之前(input.println(message))。

+0

为什么会有所作为? – EJP 2012-08-01 11:01:25

0

尝试关闭输出流到进程。基本上你可以控制输出中的任何缓冲一边的子进程

1

我已经试过你的代码它工作正常没有代码的问题我认为与命令的问题你试图执行(它什么都不返回)。尝试改变参数,甚至改变整个命令来测试。如果你可以在其他地方执行命令(终端例如尝试它,并看到具有相同参数的输出)