Как вставить строку между двумя другими строками в консоли с Java? - PullRequest
0 голосов
/ 20 июня 2019

Я настраиваю интерфейс консоли команды, где строка ввода всегда должна быть строкой, которая находится ниже любой другой строки.Поэтому, если другой поток что-то печатает, а я что-то записываю в строку ввода, он прерывается.Так что все портится, и я не могу четко редактировать свои данные в 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), ...

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете заглянуть в некоторые библиотеки управления терминалом, чтобы навести курсор на определенный столбец / строку

здесь - это сообщение, вы можете посмотреть в Charva или lanterna

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...