Я хочу запустить интерактивную команду с помощью Apache Commons Exec.Все работает, за исключением того, что когда моя команда выполняется и ждет ввода пользователя, я не вижу свой ввод в консоли, пока не нажму клавишу ввода, что делает его практически непригодным для использования.
Это пример интерактивной программы:
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while (true) {
System.out.print("=> ");
try {
line = in.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(line);
}
}
Теперь я хочу выполнить это с помощью Apache Commons Exec следующим образом:
public static void main(String[] args) {
Executor ex = new DefaultExecutor();
ex.setStreamHandler(new PumpStreamHandler(System.out, System.err, System.in));
CommandLine cl = new CommandLine("java");
cl.addArguments("-cp target\\classes foo.bar.Main");
try {
ex.execute(cl);
} catch (ExecuteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Как я уже сказал, это в основном работает, я получаю приглашение "=>", но когда я набираючто-то, чего я не вижу, пока не нажму "войти".Я делаю это на Windows 7 с подсказкой cmd.Буду признателен за любую подсказку о том, как добиться желаемого поведения.
Редактировать: Он работает, как и ожидалось, в Linux .Я предполагаю, что это проблема с приглашением Windows cmd.Я все еще хотел бы сделать эту работу, если это вообще возможно, поэтому я был бы признателен за понимание этого поведения в Windows.
Edit2: Я также тестировал с оболочкой msys и powershell, оба демонстрируют одну и ту же проблему.
Edit3: я обошел проблему, запустив отдельное приглашение cmd.Это работает, но мне все еще нравится понимать, почему.
CommandLine cl = new CommandLine("cmd");
cl.addArguments("/C java -cp target\\classes foo.bar.Main");
спасибо
Рауль