Выполнить команды для запуска процесса - PullRequest
0 голосов
/ 17 декабря 2018

В настоящее время я пытаюсь использовать процессы в Java для запуска файла JAR.Я могу запустить и прочитать содержимое, напечатанное процессом.То, что я пытаюсь достичь, это написать команду для процесса.Файл jar, который я запускаю, запрашивает ввод пользователя, и я пытаюсь разрешить пользователю ввести этот ввод.Это мой текущий код, который не работает:

public class Main {

public static void main(String[] args) {

    String command = "java -jar game.jar";

    Process process = executeCommand(command);

    CompletableFuture.runAsync(() -> {

        Scanner scanner = new Scanner(System.in);

        while (true) {

            String input = scanner.nextLine();

            if (input == null) {
                continue;
            }

            executeCommand(process, input);

        }

    });

    readOutput(process);

}

public static Process executeCommand(String command) {

    try {
        Process process = Runtime.getRuntime().exec(command);

        return process;
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }

}

public static List<String> readOutput(Process process) {

    List<String> output = new ArrayList<>();

    try {

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

        String line;
        while((line = reader.readLine()) != null) {
            System.out.print(line + "\n");
            output.add(line);
        }

        process.waitFor();

        return output;

    } catch (IOException ex) {
        ex.printStackTrace();
        return output;
    } catch (InterruptedException ex) {
        ex.printStackTrace();
        return output;
    }

}

public static void executeCommand(Process process, String command) {

    try {

        OutputStream out = process.getOutputStream();

        out.write(command.getBytes());

    } catch (IOException ex) {
        ex.printStackTrace();
    }

}

}

1 Ответ

0 голосов
/ 17 декабря 2018

Мне удалось решить проблему, добавив out.flush ()

public static void executeCommand(Process process, String command) {

    try {

        OutputStream out = process.getOutputStream();

        out.write(command.getBytes());
        out.flush();

    } catch (IOException ex) {
        ex.printStackTrace();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...