0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11

Ввод данных в консоль java

15.05.2016, 17:08. Показов 1581. Ответов 27
Метки java (Все метки)

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

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

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

Есть ли какое-нибудь решение данной проблемы?
Изображения
 
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2016, 17:08
Ответы с готовыми решениями:

Ввод данных через консоль
package javaapplication1; import static java.lang.Math.*; import java.util.*; public class JavaApplication1 { /** ...

Ввод данных через консоль
При неправельном вводе цикл должен возвращать нас обратно к вводу в правельном формате.. Не могу понять почему при правельном вводе меня...

Ввод и вывод строковых данных на консоль
Здравствуйте! Подскажите по коду, что можно переделать или добавить? Задание: public class Test { public static void...

27
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
16.05.2016, 19:18  [ТС]
Это невозможно реализовать?
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
16.05.2016, 19:31
Исходники в студию.
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
17.05.2016, 17:47  [ТС]
Main.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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();
     }
}
Добавлено через 21 час 36 минут
Ап..
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
18.05.2016, 08:36
Anton-B1ruk, посмотрел я и не понял чего ты в итоге хочешь. Что ты подразумеваешь, когда говоришь
Цитата Сообщение от Anton-B1ruk Посмотреть сообщение
нужно, чтобы вводимый текст ВСЕГДА был под выводимым текстом.
Что это значит? Что текст должен накладываться друг на друга или он должен быть как бы "спрятан" за выводимым? Или может он к консоли должен печататься поочередно? Какая изначально стоит задача?

Не по теме:

Что это за ***дец?

Кликните здесь для просмотра всего текста
Java
1
2
3
4
 catch(Exception ex){
   if(ex.toString().equals("java.util.NoSuchElementException")){
     System.out.println("Введите команду");
   continue;

0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
18.05.2016, 09:26  [ТС]
Слушай, если я делаю такой код, значит у меня выбивает ошибку когда строка ввода пуста. САМ ПОПРОБУЙ.

Команда должна быть всегда перед знаком ">", а выводимый(System.out.print("")) сверху! И чтобы ВЫВОДИМЫЙ не накладывался на ВВОДИМЫЙ, т.е. вводимый текст должен быть всегда под ВЫВОДОМ! ПОД ВЫВОДОМ! ПППППОД ВВВВВВВЫВОДОМ.
=====
ВЫВОДИМЫЙ ТЕКСТ.
ВЫВОДИМЫЙ ТЕКСТ.
>СТРОКА ДЛЯ ВВОДА НА КОТОРУЮ НЕ ДОЛЖЕН НАКЛАДЫВАТЬСЯ ВЫВОДИМЫЙ ТЕКСТ.
=====
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2016, 09:59
Anton-B1ruk, сделать то что вы хотите теоритически может и возможно, но очень непросто и скорее всего будет платформозависимо (например работать только на линуксе).
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
18.05.2016, 10:04
Цитата Сообщение от Anton-B1ruk Посмотреть сообщение
Слушай, если я делаю такой код, значит у меня выбивает ошибку когда строка ввода пуста. САМ ПОПРОБУЙ.
Если ты про вот этот момент
Java
1
2
3
4
5
6
7
8
9
10
11
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;
                        }
                    }
То совсем не удивительно. Более того, твой try/catc вообще никогда нормально не сработает (по крайней мере секция catch). Потому что
Java
1
int iCnt = System.in.read(bKbd);
требует обработку IOException, а в catch секции ты ловишь RuntimeException.

А то что ты хочешь сделать, чтобы курсор "передвигался" постоянно в конец вводимого текста, тот тут лично моего знания работы с консолью не хватает, чтобы понять как реализовать то, что ты хочешь. Возможно вообще никак. Но тебе надо что то вроде стандартного терминала, где есть строка ожидания ввода, а выше просто чтобы бежал твой текст.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2016, 10:34
Цитата Сообщение от 84 Посмотреть сообщение
требует обработку IOException, а в catch секции ты ловишь RuntimeException.
где вы видите тут RuntimeException? ТС ловит базовый класс исключения. Так что с этим проблем нет. Логика обработки кривая это да, но обрабатываться исключение будет.
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
18.05.2016, 10:37
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
где вы видите тут RuntimeException
Java
1
class NoSuchElementException extends RuntimeException
Это из JavaDoc
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2016, 10:40
Java
1
class RuntimeException extends Exception
это из личного опыта)
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
18.05.2016, 10:44
Собственно смысл не в том какое исключение куда ловиться, а как это реализовано.
С другой стороны catch у него ловит Exception, по этому его NulpointerException туда поймается и даже обработается (пусть и через пятую точку), он он говорит, что если убрать строку обработки, то код не компилится. А не компилируется он, потому что надо обрабатывать как то IOException, который выбрасывает поток ввода.
Вот вся проблема и сводится к тому, что он "обманывает" компилятор и так делать совсем нельзя. Собственно сам вопрос был как бы в офтопе и был обычным замечанием. К делу он отношения не имеет, так что можно или просто забить или перенестись в другую тему для обсуждения.
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
18.05.2016, 10:46  [ТС]
Зачем вы тут катч обсуждаете!? Совсем другой вопрос был!
0
84
 Аватар для 84
28 / 33 / 12
Регистрация: 11.04.2016
Сообщений: 132
18.05.2016, 10:47
Цитата Сообщение от Anton-B1ruk Посмотреть сообщение
Зачем вы тут катч обсуждаете!? Совсем другой вопрос был!
На твой вопрос ответ уже дали.
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
18.05.2016, 15:39  [ТС]
Можно код..?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2016, 16:00
Anton-B1ruk, какой код? Вам сказали что так сделать скорее всего нельзя. Какой код вы хотите получить?
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
18.05.2016, 16:56  [ТС]
Консоль сервера майнкрафт: вложение

Вопросики?
Миниатюры
Ввод данных в консоль java  
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
18.05.2016, 17:20
консоль сервера майнкрафт != консоли в винде или в IDE
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 11
18.05.2016, 17:35  [ТС]
Консоль сервера запущена через .bat, как и программа, которую я пишу. Шах и мат.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.05.2016, 17:43
Цитата Сообщение от Anton-B1ruk Посмотреть сообщение
Консоль сервера майнкрафт
ну так в чем проблема? У майнкрафта открытый код насколько я знаю. Пойдите и посмотрите как это реализовано

Добавлено через 5 минут
Я вот пошел скачал server.jar. Запусил его, открылось GUI приложение а не консоль. Покажите откуда вы скачали то что на скриншоте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.05.2016, 17:43
Помогаю со студенческими работами здесь

Ввод и вывод данных на консоль четных и нечетных чисел
Здравствуйте! Подскажите по коду, что можно переделать или добавить? Задача: Создать программу, которая будет сообщать, является...

Ввод данных в Java
Здравствуйте! Скажите пожалуйста, какая команда в языке программирования Java существует для того, чтобы пользователь мог ввести...

Ввод данных в Java
Помогите разобраться с операторами ввода в Java. В книгах не нашёл ничего. В С, С++ есть нормальные функции и потоки scanf, >>. В...

Потоки данных. Ввод-вывод. Java 2
Следует модифицировать программу-шаблон, преобразующую файл с двоичными данными в текстовую форму, дополнив ее методами и добавить вывод...

Ввод массива в консоль
Добрый Вечер!! Опять у меня возник вопрос! Что-то не получается ввести массив. Напишите, пожалуйста. Вот я как делал: BufferedReader br...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Колмогоровская сложность: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru