私は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とゆっくり入力している私のスクリーンショットを次に示します。入力の途中で出力が挿入されていることがわかります。
この非同期出力が現在の入力カーソルをそれほどひどく乱したくない。カーソルの位置を変更せずに、カーソルの位置の後に出力を印刷できれば、それで問題ありません。または、現在のプロンプトの前に出力を完全に印刷する(プロンプトを下に移動する)こともできますが、おそらく何らかの方法でプロンプトを終了し、出力を印刷してから、進行中の入力をコピーして新しいプロンプトを作成する必要があると思います。