Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不干扰当前输入提示的异步输出_Java_Command Line - Fatal编程技术网

Java 不干扰当前输入提示的异步输出

Java 不干扰当前输入提示的异步输出,java,command-line,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 TimerTa

我使用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的截图,你可以看到输出在我的打字中间插入。


我不希望这个异步输出如此严重地干扰当前输入光标。如果我可以在不改变光标位置的情况下在光标位置后打印输出,那就好了。或者更好的做法是在当前提示符之前打印输出,或者向下移动提示符,但我认为这可能涉及以某种方式结束提示符,打印输出,然后在复制任何正在进行的输入的情况下生成新的提示符。

您必须使用类似以下内容:

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代码…

你的意思是,当你在光标后面键入时,我在想什么?所以当你输入:112123等等。????请发布一些附加信息。谢谢。@bitwave,是的,如果它可以像这样完成光标永远不会改变位置,并且进一步键入将***推开那将是非常好的。@rambocoder这样做是非常罕见的。命令行应用程序通常设计为只接受参数,然后告诉它们该做什么。@LukasKnuth,是的,我个人也没有注意到有很多人这样做。@rambocoder我没有注意到,这就是为什么我认为在正常情况下甚至不可能做到的原因。下一行会阻塞,直到按下enter键。这对情况没有帮助。我认为你不必使用扫描仪,你应该从系统中读取每一个字符…嗯。。。。我认为您的这个最新想法可以正常工作,只要我可以在System.in上执行非阻塞读取。当您以异步方式对线程使用I/O时,您应该使用