• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Работа с консолью.

  • Автор темы @LE}{@NDER
  • Дата начала
@

@LE}{@NDER

Всем привет.
У меня возникла проблема в работе с консолью. Дали мне задание, состоящее из 2х компонентов, бизнес логика и пользовательский интерфейс: вьюшки с меню. Бизнес логику уже написал, все вроде бы просто, но... swingом пользоваться не разрешили, только консоль, сторонние библиотеки типа JCurses тоже не катят - все надо сделать самому.
Вот тут и возникли вопросы:
1. Как очищать консоль? В Сишке я использовал system("cls"); В C# все еще проще - Console.Clear();
Решения типа for(int i=0; i<8; i++){System.out.println("\n");} не катят, мне нужно чтобы меню было сверху.
2. Как в джаве реализовать односимвольный ввод?
Например в С# я мог написать что-то вроде такого:
<!--shcode--><pre><code class='C#'>ConsoleKeyInfo cki;
Console.Write("Input char: ");
cki = Console.ReadKey();
Console.WriteLine("\n"+cki.Key.ToString());[/CODE]
В джаве пробовал BufferedReader и Scanner, но добиться чтения одного символа с завершением ввода я не смог.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
У меня возникла проблема в работе с консолью. Дали мне задание, состоящее из 2х компонентов, бизнес логика и пользовательский интерфейс: вьюшки с меню. Бизнес логику уже написал, все вроде бы просто, но... swingом пользоваться не разрешили, только консоль, сторонние библиотеки типа JCurses тоже не катят - все надо сделать самому.
откуда такие странные требования?

1. Как очищать консоль? В Сишке я использовал system("cls"); В C# все еще проще - Console.Clear();
платформонезависимого метода нет. надо определится, что надо поддерживать.
Как в джаве реализовать односимвольный ввод?
если имеется ввиду non blocking console input то без jni не получится.

если кратко, то ява не поддерживает консоль. консоль в яве - это поток байтов. в который можно писать и который можно читать. все.
 
@

@LE}{@NDER

откуда такие странные требования?


платформонезависимого метода нет. надо определится, что надо поддерживать.

если имеется ввиду non blocking console input то без jni не получится.

если кратко, то ява не поддерживает консоль. консоль в яве - это поток байтов. в который можно писать и который можно читать. все.
Откуда требования - это значения не имеет. Их нужно придерживаться.

Что такое jni и как этим пользоваться? Желательно какой-нибудь содержательный линк.

99%, что задание проверять будут на винде, поэтому платформа скорее всего виндозная.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Что такое jni и как этим пользоваться? Желательно какой-нибудь содержательный линк.

но напрямую использовать jni достаточно муторно и для него есть замечательный врапер link removed
 
@

@LE}{@NDER


но напрямую использовать jni достаточно муторно и для него есть замечательный врапер link removed
Спасибо, jna действительно очень неплохо.
Вот код решения для очистки консоли и ввода одиночного символа без ожидания нажатия enter, ну и можно тянуть другие функции:
Код:
import com.sun.jna.*;
public abstract class View {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
CLibrary.class);

void system(String command);
int _getch();
}
}
И использование:
Код:
CLibrary.INSTANCE.system("cls");
char a = (char)CLibrary.INSTANCE._getch();
System.out.println("Input: "+a);
PS: вообще это печально, что такие, вроде бы простые вещи не имеют решения на уровне языка.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!