【问题标题】:How to scroll text output in Java?如何在 Java 中滚动文本输出?
【发布时间】:2011-12-06 17:25:15
【问题描述】:

假设我有一个高度为 30 行的终端。

假设我有一个输出 100 行输出的循环

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

有没有办法可以输出前 30 行、显示“按 Enter 继续输出...”的文本、在用户按 Enter 时显示接下来的 30 行等?

我想以最简单的方式做到这一点。如果我能以某种方式使用less,那就太好了。


更新

这需要在 Java 源代码中实现。以下不是合适的解决方案:

java program | less'

另外,我需要以编程方式获取执行它的终端的高度。

【问题讨论】:

    标签: java terminal less-unix


    【解决方案1】:

    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);   
    }
    

    【讨论】:

    • 您能否详细说明我将如何使用tput cols?我是一个 Java 菜鸟。
    • @macek:从tput 获取屏幕高度并将其作为参数传递给Java 应用程序。阅读man tput
    【解决方案2】:

    在 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);
    }
    

    【讨论】:

    • 这里 30 是静态编码的。如何动态获取终端高度?
    【解决方案3】:

    要么将 tput cols 作为命令行参数或系统属性 (java -DTermHeight=`tput cols`) 传递给您的 java 程序,要么在运行时使用 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);
        }
    

    【讨论】:

    • 将此标记为已接受的答案,以提供使用 Java 获取终端高度的方法。为其他答案 +1。
    • 在 Java 中运行 tput cols 时总是得到 '80',即使我的终端中的相同命令给了我更大的价值。我正在使用 JDK 1.7u51
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2014-08-17
    • 2019-11-30
    • 2010-10-28
    相关资源
    最近更新 更多