Невозможно прочитать значения консоли Java - PullRequest
0 голосов
/ 17 апреля 2020

Итак, я хочу запустить jar с помощью java, получить вывод и сохранить его в строку. Я вижу через консоль, что jar работает без проблем, и вижу вывод через консоль. Однако консольные значения не сохраняются и возвращают ноль при печати. Что я делаю неправильно? Пожалуйста, помогите.

Используемый jdk - jdk 11. Код, который я написал до сих пор:

    public static void runTest(String Id, String token) throws IOException, InterruptedException{

    ProcessBuilder pb = new ProcessBuilder("java", "-jar", "./lib/Myjar.jar", Id, token);
    pb.redirectErrorStream(true);
    pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
    Process proc = pb.start();

    System.out.println("Job running");
    BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    StringBuilder builder = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        builder.append(line);
        builder.append(System.getProperty("line.separator"));
    }
    String result = builder.toString();

    proc.waitFor();
    System.out.println("Job finished");
    System.out.println("Output:\n" + result);
    }

1 Ответ

0 голосов
/ 17 апреля 2020

BufferedReader пуст, и поэтому вы не можете ничего читать в то время как -l oop. В конце StringBuilder является пустым объектом, и результирующая строка не имеет значения.

Вот пример того, как вы можете прочитать Вывод из одной банки в другую Java Программа:

Первая программа: мой java .jar

public static void main(String[] args) {
    System.out.println("Hello World"); 
}

И затем код Java, который читает вывод из моего java .jar:

public static void main(String[] args) throws IOException, InterruptedException {
    String token = "t";
    String Id = "x";
    runTest(Id, token);
}

public static void runTest(String Id, String token) throws IOException, InterruptedException {

    ProcessBuilder pb = new ProcessBuilder("java", "-jar", "./myjava.jar", Id, token);
    pb.redirectErrorStream(true);
    pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
    Process proc = pb.start();

    System.out.println("Job running");
    StringBuilder builder = new StringBuilder();

    try(InputStream  in = proc.getInputStream(); 
        Scanner scanner = new Scanner(in)) {
        while(scanner.hasNext()) { 
            builder.append(scanner.next());
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    String result = builder.toString();
    proc.waitFor();
    System.out.println("Job finished");
    System.out.println("Output:\n" + result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...