Когда вы выполняете внешний процесс с Runtime.exec()
, его стандартные потоки ввода и вывода не подключаются к терминалу, с которого вы запускаете программу Java. Вы можете использовать перенаправление оболочки для подключения, но сначала вам нужно знать, какой терминал использовать. Нет способа найти терминал, используя стандартный API, но, вероятно, вы можете найти библиотеку с открытым исходным кодом, которая делает это.
Чтобы увидеть, что это можно сделать, эта программа сама открывается в less
:
public class Test {
public static void main(String[] args) throws Exception {
Process p = Runtime.getRuntime().exec(
new String[] {"sh", "-c",
"less Test.java < "+args[0] + " > "+args[0]});
System.out.println("=> "+p.waitFor());
}
}
Чтобы запустить его, вы должны использовать java Test $(tty)
. Программа tty
выводит имя терминала, подключенного к его стандартному вводу.
Я не слишком уверен в переносимости этого решения; по крайней мере, это работает в Linux.