JLine2 中的错误? ConsoleReader.clearScreen

Bug in JLine2? ConsoleReader.clearScreen


编辑:此 feature 仅在我调用 ConsoleReaderclearScreen 方法时发生!任何其他更改都不会产生影响。这是 JLine2 中的错误吗?


J线2:

为什么,当我 运行 这样做时,我会直接收到两个控制台提示 (----> ---->)? 是因为正在创建两个控制台吗?我怎么看不懂。
我在这里没看到什么?

import java.io.IOException;
import jline.console.ConsoleReader;

class TextUi implements Ui {
    private static final String prompt1 = "---->  ";
    public void homeScreen() {
        try {
            ConsoleReader con = new ConsoleReader();
            con.setPrompt(prompt1);

            con.clearScreen();
            System.out.println("Press any key to continue...");
            con.readCharacter();
            con.clearScreen();

            System.out.println("Here is a prompt. Do something and press enter to continue...");
            String line = con.readLine();
            con.clearScreen();

            System.out.println("You typed: ");
            System.out.println(line);
            System.out.println("Press any key to exit. ");
            con.readCharacter();
            con.clearScreen();
        } catch (IOException e) {
            e.printStackTrace();

        }   
    }   
    public void exitSplash() {
        System.out.println("Thank You. Goodbye.");
        System.out.println("");
    }   
    public void creditsScreen() {
    }   
    public static void main (String argv[]) {
            TextUi ui = new TextUi();
            ui.homeScreen();
            ui.exitSplash();
    }   
}

这不是一个错误,你只需要在每次调用 con.clearScreen() 之后调用 con.flush()

clearScreen 方法不会自动调用 flush()(在某些情况下它可能会在不刷新的情况下工作)但是 readLine 方法会调用,所以屏幕实际上只有在你打电话给 con.readLine()。这导致最后一个 System.out.println(在 readLine 之前)被清除,即使它是在 con.clearScreen() 之后调用的。

您在 try 块中的代码应更改为:

ConsoleReader con = new ConsoleReader();
con.setPrompt(prompt1);

con.clearScreen();
con.flush();
System.out.println("Press any key to continue...");
con.readCharacter();
con.clearScreen();
con.flush();

System.out.println("Here is a prompt. Do something and press enter to continue...");
String line = con.readLine();
con.clearScreen();
con.flush();

System.out.println("You typed: ");
System.out.println(line);
System.out.println("Press any key to exit. ");
con.readCharacter();
con.clearScreen();
con.flush();