Связь со встроенным JAR-файлом

1

В Node.js мне необходимо запустить JAR файл и, следовательно, создать дочерний процесс:

var cp = require('child_process');
var child = cp.spawn('.../java.exe', ['-jar', 'C:/test.jar']);

child.stdout.on('data', function(data) {
    console.log(data.toString());
});
child.stderr.on('data', function(data) {
    console.log('Error: ' + data.toString());
});

Я пытаюсь использовать child.stdin.write('test test'); отправлять данные дочернему процессу, но здесь, где я застрял - я понятия не имею, как получить эти данные в программе Java.

Я пробовал следующее:

public static void main(String[] args) {
    System.out.println("Waiting for input");
    Scanner s = new Scanner(System.in);
    String resp = s.nextLine();
    System.out.println("Input got: " + resp);
}

... а также инициализировать DataInputStream(System.in), но, увы, безрезультатно. Я вижу строку "Ожидание ввода" в Node.js, но кажется, что я лаяю неправильное дерево, слушая System.in.

Как получить вход, который отправляется из Node.js с child.stdin.write() и child.stdin.end()? Заранее спасибо!

Теги:
stream
communication
ipc
interprocess

1 ответ

0
Лучший ответ

System.in верна, и ошибка заключалась в том, что я забыл очень легко забываемую деталь:

\n должно быть добавлено в конце каждого переданного сообщения, иначе оно не пройдет. Это все, что есть.


Я хотел бы оставить этот вопрос на случай, если кто-то другой столкнется с той же проблемой. Существует много информации о создании дочернего процесса из Java-программы, но не о создании Java-программы, которая будет действовать как сам дочерний процесс.

  • 0
    Вероятно, это то, что подразумевается в документации Node.js для дочерних процессов : «Обратите внимание, что некоторые программы используют линейный буферизованный ввод-вывод внутри. [...] это означает, что данные, которые вы отправляете дочернему процессу, не сразу используются».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню