我想知道某个应用程序在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());