异步输出,不会干扰当前输入提示

时间:2012-07-09 17:23:35

标签: java command-line

我正在使用TimerTask来模拟在线程中运行的程序的一部分,在不可预测的时间产生输出。

package consoletest;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class ConsoleTest {
    public static void main(String[] args) {


        TimerTask tt = new TimerTask(){
            public void run() {
                System.out.print("\n***");
            }
        };

        new Timer(true).schedule(tt, 2000);

        Scanner scanner = new Scanner(System.in);
        System.out.print("enter a command: ");
        String line = scanner.nextLine();
    }
}

我的问题是,如果您在输出时主动输入,则输出将插入当前光标位置,然后光标放在输出字符串的末尾。

例如,这是我慢慢输入12345678的屏幕截图,您可以看到输出在我输入的中间插入。

command line demo of problem

我不希望这个异步输出如此严重地干扰当前输入光标。如果我可以在光标位置之后打印输出而不改变光标位置,那就没问题了。或者更好的方法是在当前提示之前打印输出(向下移动提示),但我认为这可能会以某种方式结束提示,打印输出,然后在复制过程中正在进行任何输入时发出新提示。

1 个答案:

答案 0 :(得分:0)

你必须使用这样的东西:

public static void main(String[] args) {

        String input = "";
        char c = (char) System.in.read();
        while(c!=-1){
              c = System.in.read();
              input += c;
              System.out.print("\r"+input+"***"); // \r returns the cursor to the line-beginning
        }

        //extra stuff
}

这可能是你想要的。对不起我可能错误的Java代码我写的这个... ...