2015-11-14 4 views
3

Ошибка в JLine2? ConsoleReader.clearScreen


EDIT: Этот feature возникает, когда я вызываю clearScreen метод ConsoleReader! Любые другие изменения не влияют. Это ошибка в JLine2?


JLine2:

Почему, когда я запускаю это, я получаю две консоли подсказки непосредственно друг за другом (----> ---->)? Это потому, что создаются две консоли? Я не понимаю, как это сделать.
Что я не вижу здесь?

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(); 
    } 
} 
+0

Какую версию jline вы используете? – cliff2310

+0

JLine2. Вопрос обновлен – jdurston

ответ

0

Это не ошибка, вам просто нужно позвонить con.flush() после каждого вы звоните con.clearScreen().

Метод 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(); 
Смежные вопросы