小编典典

从另一个进程的输出流中读取

java

我想在我的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();
    }
}

}

阅读 296

收藏
2020-11-26

共1个答案

小编典典

stdout被缓冲,并且如果您不写入屏幕,则不会自动刷新。加:

fflush(stdout);

后:

printf("%#lx %s\n", (UInt32)event.elementCookie,
    (event.value == 0) ? "depressed" : "pressed");
2020-11-26