Я настраиваю интерфейс консоли команды, где строка ввода всегда должна быть строкой, которая находится ниже любой другой строки.Поэтому, если другой поток что-то печатает, а я что-то записываю в строку ввода, он прерывается.Так что все портится, и я не могу четко редактировать свои данные в Windows, Linux ...
Так что, если эта стрелка - стрелка, где мое приложение начинает читать строку из консоли
>
и если я что-то напишу
> myInput
, а некоторые другие потоки что-то напечатают.
> myInputLogFromOtherThread
, тогда вход будет прерван с последнимвойдите в систему и курсор переместится на ничейную землю, и я не могу отредактировать свой ввод, как я сказал выше (я все еще могу отредактировать его, но я не вижу изменений)
Я пробовал много разных APIкак JLine, Cursors, Lanterna, но они не работали для меня.Лантерна отстала, Курсоры и 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), ...