我想在我的Java程序中读取c-Application的输出流。 iremoted (可在此处获得:http : _//osxbook.com/software/iremoted/download/iremoted.c_ )是一个C应用程序,如果按下了Apple Remote遥控器上的按钮,它将显示诸如“ 0x19按下”的单独行。如果我启动改头换面的程序,那么一切都会很好,每当我按下一个按钮时,这些单独的行就会显示在屏幕上。现在,我想在Java应用程序中读取c应用程序的输出流,以处理Java项目中Apple Remote的输入。不幸的是,我不知道为什么 没有重新输入 ?
我用一个简单的HelloWorld.c程序进行了尝试,在这种情况下,程序按预期响应了(打印出HelloWorld)。
为什么它不适用于改头换面的程序?
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(); } } }
stdout被缓冲,并且如果您不写入屏幕,则不会自动刷新。加:
stdout
fflush(stdout);
后:
printf("%#lx %s\n", (UInt32)event.elementCookie, (event.value == 0) ? "depressed" : "pressed");