Java. Проблема с вводом

Статус
Закрыто для дальнейших ответов.

Типа админ:D

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Qamulex
Здравствуйте.
Данная проблема не связана с майнкрафтом(будет связана позже).


В коде программы находится таймер, который каждую секунду выводит в консоль текст.

Так же, в коде есть функция, которая ловит вводимые данные в консоли.

Проблема в том, что эти вводимые данные "покрывает" выводимый текст. А нужно, чтобы вводимый текст ВСЕГДА был под выводимым текстом. Как в консоли сервера майнкрафт
Проблема выглядит примерно вот так:



Есть ли какое-нибудь решение данной проблемы?

Код:
Java:
package main.Main;

import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

    public static void main(String[] args){
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("Выводимый текст");
            }
        }, 1000, 1000);
        commands();
    }

     public static void commands(){
        Thread commands = new Thread(){
            @Override
            public void run(){
                while(true){
                    byte bKbd[] = new byte[256];
                    String szStr = "";
                    StringTokenizer st;
                    System.out.println(">");
                    try {
                        int iCnt = System.in.read(bKbd);
                        szStr = new String(bKbd, 0, iCnt);
                        st = new StringTokenizer(szStr, "\r\n");
                        szStr = (String)st.nextElement();
                    } catch(Exception ex){
                        if(ex.toString().equals("java.util.NoSuchElementException")){
                            System.out.println("Введите команду");
                            continue;
                        }
                    }

                    String[] args;
                    args = szStr.split(" ");
                    switch (args[0]){
                        case "shutdown":
                            System.exit(0);
                            break;
                        default:
                            System.out.println("Команда не найдена");
                            break;
                    }
                }
            }
        };
        commands.start();
     }
}
 
Последнее редактирование:
Здравствуйте.
Данная проблема не связана с майнкрафтом(будет связана позже).


В коде программы находится таймер, который каждую секунду выводит в консоль текст.

Так же, в коде есть функция, которая ловит вводимые данные в консоли.

Проблема в том, что эти вводимые данные "покрывает" выводимый текст. А нужно, чтобы вводимый текст ВСЕГДА был под выводимым текстом. Проблема выглядит примерно вот так:



Есть ли какое-нибудь решение данной проблемы?
+ \n
..
Профит
 
Java:
} catch(Exception ex){
      if(ex.toString().equals"java.util.NoSuchElementException"
Ясно.
Что хотел-то?
Так и не понял, что ты хотел. Так попробуй:
Java:
System.out.println("\nВыводимый текст");
 
Java:
                    } catch(Exception ex){

                        if(ex.toString().equals"java.util.NoSuchElementException"

Ясно.

Что хотел-то?

Так и не понял, что ты хотел. Так попробуй:

Java:
System.out.println("\nВыводимый текст");
ВЫВОДИМЫЙ ТЕКСТ должен быть всегда сверху. А ВВОДИМЫЙ всегда снизу. Как в консоли сервера майнкрафт.
Не обращайте внимания на ошибки в консоли. Запустил первый попавшийся сервер.
 

Вложения

  • upload_2016-5-17_18-5-31.png
    upload_2016-5-17_18-5-31.png
    221,9 КБ · Просмотры: 21
ВЫВОДИМЫЙ ТЕКСТ должен быть всегда сверху. А ВВОДИМЫЙ всегда снизу. Как в консоли сервера майнкрафт.
Не обращайте внимания на ошибки в консоли. Запустил первый попавшийся сервер.
Это особенность CMD.
 
Так она не работает! Вы так и не поняли!?
Да не будет это работать в CMD, как бы ты не мучился. Пиши свой враппер, который будет считывать System.out(и писать в System.in) и управлять курсором.

Про особенность: как раз она и работает. Ищи другую консоль/шелл.
 
Здравствуйте.
Данная проблема не связана с майнкрафтом(будет связана позже).


В коде программы находится таймер, который каждую секунду выводит в консоль текст.

Так же, в коде есть функция, которая ловит вводимые данные в консоли.

Проблема в том, что эти вводимые данные "покрывает" выводимый текст. А нужно, чтобы вводимый текст ВСЕГДА был под выводимым текстом. Как в консоли сервера майнкрафт
Проблема выглядит примерно вот так:



Есть ли какое-нибудь решение данной проблемы?

Код:
Java:
package main.Main;

import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Timer;
import java.util.TimerTask;

public class Main {

    public static void main(String[] args){
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("Выводимый текст");
            }
        }, 1000, 1000);
        commands();
    }

     public static void commands(){
        Thread commands = new Thread(){
            @Override
            public void run(){
                while(true){
                    byte bKbd[] = new byte[256];
                    String szStr = "";
                    StringTokenizer st;
                    System.out.println(">");
                    try {
                        int iCnt = System.in.read(bKbd);
                        szStr = new String(bKbd, 0, iCnt);
                        st = new StringTokenizer(szStr, "\r\n");
                        szStr = (String)st.nextElement();
                    } catch(Exception ex){
                        if(ex.toString().equals("java.util.NoSuchElementException")){
                            System.out.println("Введите команду");
                            continue;
                        }
                    }

                    String[] args;
                    args = szStr.split(" ");
                    switch (args[0]){
                        case "shutdown":
                            System.exit(0);
                            break;
                        default:
                            System.out.println("Команда не найдена");
                            break;
                    }
                }
            }
        };
        commands.start();
     }
}
Аааа... Создай отдельный класс для обработки команд...
 
Либа jline вроде бы это в консоли майна делает.
 
Декомпильните remote server toolkit, посмотрите как оно там работает.
 
Декомпильните remote server toolkit, посмотрите как оно там работает.
https://github.com/Sabbertran/MCToo...sabbertran/mctoolkit/MCToolkit.java#L169-L269

Тут вроде идёт обработка команды.
UPD:
https://github.com/Sabbertran/MCToo...sabbertran/mctoolkit/MCToolkit.java#L119-L140

Тут идёт считывание команды с консоли и дальше обработка.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх