我正在设置一个控制台命令界面,其中输入行应始终是每隔一行下面的行。因此,如果在我在输入行中写入内容时另一个线程打印了内容,则会中断。因此,一切都搞砸了,我无法在Windows,Linux中清楚地编辑输入内容。
因此,如果此箭头是我的应用程序开始从控制台读取该行的箭头
>
如果我写点东西
> myInput
和其他一些线程会打印出一些内容。
> myInputLogFromOtherThread
然后输入将以最新的日志中断,并且光标将跳至“无人区”,并且我无法像上面所说的那样编辑输入(我仍然可以编辑它,但看不到更改)>
我尝试了许多不同的Api,例如JLine,Cursors,Lanterna,但它们对我没有用。 Lanterna落后了,Cursors和JLine根本没有运行,而且我也没有找到任何有用的文档来了解如何制作自己想要的东西
这是我的代码,在println事件中,我想在输入行> myInput
和输入之前的行之间插入要打印到控制台的行。
public static void main(String[] args) {
//On System.out.println event
System.setOut(new PrintStream(System.out) {
public void println(String s) {
super.println(s); // So i want that this line, gets insertet between the last line and the line before the last line
/*
* So it should be inserted
*
* SomeRandomLogging
* <- here, that it doesn't interrupt our input
* > myInput
*/
}
});
System.out.print("> ");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("LogFromOtherFread");
}
}).start();
final List<String> lines = new ArrayList<>();
try (BufferedReader in = new BufferedReader(new InputStreamReader(System.in))) {
String line = null;
while ((line = in.readLine()) != null) {
lines.add(line);
}
}
}
所以我希望在应用程序将要打印的行移动到控制台之后,在输入行之前,它应该像命令界面一样工作。 Linux,Bukkit(Minecraft Server Api),...