我想知道某个应用程序在Linux中是否是焦点。说是谷歌Chrome。为此,我在liner上编写了一个bash,它正确地完成了这个任务。
xdotool search --name --class 'google-chrome' | grep $(xdotool getactivewindow)
当这个命令在终端中运行时,它将打印终端本身的id。要避免出现这种情况,请运行以下命令并在3秒内选择Chrome。
sleep 3; xdotool search --name --class 'google-chrome' | grep $(xdotool getactivewindow)
问题是,当我从Java运行上述一行程序时,它似乎总是什么都不打印。这是我的代码:

String cmd = "xdotool search --name --class 'google-chrome' | grep $(xdotool getactivewindow)";
Process p = Runtime.getRuntime().exec(cmd);
String result = getCommandResult(p.getInputStream());

private static String getCommandResult(InputStream stream) throws IOException {

    StringBuilder sb = new StringBuilder();
    try (InputStreamReader isr = new InputStreamReader(stream);
         BufferedReader in = new BufferedReader(isr)) {

        String line;
        while ((line = in.readLine()) != null) {
            sb.append(line);
        }
    }
    return sb.toString().trim();
}

我愿意用不同的方法来解决这个问题。

最佳答案

正如barti_ddu所说,这不起作用是因为指挥部的管道。可以通过创建一个sh进程来解决此问题,并将命令作为参数传递:

    String cmd = "xdotool search --name --class 'google-chrome' | grep $(xdotool getactivewindow)";
    Process p = new ProcessBuilder("sh", "-c", cmd).start();
    String result = getCommandResult(p.getInputStream());

08-26 10:45