Как прокрутить вывод текста в Java? - PullRequest
0 голосов
/ 13 октября 2011

Скажем, у меня есть терминал с 30 линиями высоты.

И, скажем, у меня есть цикл, который выводит 100 строк вывода

for(int i=0; i<100; i++){
  System.out.println(i);
}

Есть ли способ вывести первые 30 строк, показать текст с надписью «Нажмите ввод, чтобы продолжить вывод ...», показать следующие 30 строк, когда пользователь нажмет ввод, и т. Д.

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


Обновление

Это должно быть реализовано в исходном коде Java. Следующее не является подходящим решением:

java program | less'

Кроме того, мне нужно будет программно получить высоту терминала, на котором он выполняется.

Ответы [ 3 ]

2 голосов
/ 13 октября 2011

в Java:

BufferedReader r = new BufferedReader(new InputStreamReader(System.in));

for(int i=0; i<100; i++){
    if (i % 30 == 0) {
        System.out.println("Press enter to continue output...");
        r.readLine();
    }
    System.out.println(i);
}
2 голосов
/ 13 октября 2011

С меньше :

java program | less

или

for(int i=0; i<100; i++){
    if( i % 30 == 0) {
       System.out.println("Press enter to continue output...");
       System.in.read();
    }    
    System.out.println(i);   
}
1 голос
/ 13 октября 2011

Либо передайте tput cols вашей java-программе в качестве аргумента командной строки или системного свойства (java -DTermHeight = `tput cols`), либо получите его во время выполнения, используя Runtime.getRuntime().exec("tput cols")

Сохранить это значение в переменной height. Теперь

   height = (height==0?30:height);
    for(int i=1; i<=100; i++) {
        if (i % height== 0) {
            System.out.println("Press enter to continue output...");
            System.in.read();
        }
        System.out.println(i);
    }
...