我想在我的Java程序中读取c-Application的输出流。 iremoted (此处可用:http://osxbook.com/software/iremoted/download/iremoted.c)是一个C-Application,如果按下Apple Remote遥控器上的一个按钮,它会输出“按下0x19”这样的单独行。如果我启动iremoted程序,一切都很顺利,每次按下按钮时,我的屏幕上都会显示这些单独的行。 现在我想在我的Java应用程序中读取c-application的输出流来处理Java项目中Apple Remote的输入。 不幸的是,我不知道为什么没有输入被重新定位?
我用一个简单的HelloWorld.c程序尝试了它,我的程序按照预期的方式响应(打印出HelloWorld)。
为什么不能使用iremoted程序?
public class RemoteListener {
public void listen(String command) throws IOException {
String line;
Process process = null;
try {
process = Runtime.getRuntime().exec(command);
} catch (Exception e) {
System.err.println("Could not execute program. Shut down now.");
System.exit(-1);
}
Reader inStreamReader = new InputStreamReader(process.getInputStream());
BufferedReader in = new BufferedReader(inStreamReader);
System.out.println("Stream started");
while((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
System.out.println("Stream Closed");
}
public static void main(String args[]) {
RemoteListener r = new RemoteListener();
try {
r.listen("./iremoted"); /* not working... why?*/
// r.listen("./HelloWorld"); /* working fine */
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
stdout
被缓冲,如果您没有写入屏幕,则不会自动刷新。添加:
fflush(stdout);
后:
printf("%#lx %s\n", (UInt32)event.elementCookie,
(event.value == 0) ? "depressed" : "pressed");
答案 1 :(得分:1)
new InputStreamReader(process.getInputStream());
应该是
new InputStreamReader(process.getOutputStream());
或
new InputStreamReader(process.getErrorStream());