java и wmctrl для изменения размеров окон

Я пишу библиотеку, чтобы покрыть программу оболочки WMctrl. У меня проблема с изменением размеров окон:

String command = "wmctrl -r \"Calculator\" -e 0,100,100,500,500";

System.out.println(command);
String output = this.bashCommandExecutor.execute(command);
System.out.println(output);

Это не работает - выходная переменная пуста. Но когда я копирую и вставляю wmctrl -r "Calculator" -e 0,100,100,500,500 в Терминал, он работает правильно.

Другие команды, такие как "wmctrl -d" и "wmctrl -l", работают в методе this.bashCommandExecutor.execute().

Этот метод выглядит так:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BashCommandExecutor
{
    String execute(String bashCommand)
    {
        Process p = null;
        try {
            p = Runtime.getRuntime().exec(bashCommand);
            p.waitFor();
        }
        catch (InterruptedException | IOException e) {
            e.printStackTrace();
        }

        BufferedReader reader = new BufferedReader(
            new InputStreamReader(p.getInputStream())
        );

        String line = "";
        StringBuilder sb = new StringBuilder();
        try {
            while ((line = reader.readLine())!= null) {
                sb.append(line + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return sb.toString();
    }
}

Почему изменение размера работает в командной строке, но не работает в приложении Java?

1 ответ

Я обнаружил, что использование класса ProcessBuilder вместо Runtime.exec() позволяет запускать описанную вами команду wmctrl. Так что, а не:

      String bashCommand = "wmctrl -r \"Calculator\" -e 0,100,100,500,500";
Process p = Runtime.getRuntime().exec(bashCommand);

Ты можешь попробовать:

      String bashCommand = "wmctrl -r \"Calculator\" -e 0,100,100,500,500";
ProcessBuilder pb = new ProcessBuilder("bash", "-c", bashCommand);
Process p = pb.start();

Вот ссылка на другой пост, объясняющий разницу между

Другие вопросы по тегам