JLine2 中的错误? ConsoleReader.clearScreen
Bug in JLine2? ConsoleReader.clearScreen
编辑:此 feature 仅在我调用 ConsoleReader
的 clearScreen
方法时发生!任何其他更改都不会产生影响。这是 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();
编辑:此 feature 仅在我调用
ConsoleReader
的 clearScreen
方法时发生!任何其他更改都不会产生影响。这是 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();