Сергей Рассолов
Сергей Рассолов | Репутация: 0 (Без голоса) 29 июля 2019 в 15:15
класс Xterm Отсутствует в JDK

Здравствуйте, Начал изучать Ваш курс Основы информатики и программирования.

Скачал JDK v8. 

При попытке компиляции примеров программ содержащих класс Xterm - компилятор javac в Windows10 ругается на отсутствие этого класса.Облазил всю папку установки JDK - не нашёл. Сделал копипаст из второй лекции, Сохранил в файле Xterm.java в папке с исходниками 

Команда javac MinDivider.java выполняется,  MinDivider.class создался, но запуск на выполнение java MinDivider  происходит с ошибкой, да плюс ещё русские символы кракозябрами отображаются, не смотря на то, что файл сохранял и в UTF-8, и в CP1251, даже латиницей писал:

Вывод: приведённый пример класса либо не полный, либо не совместим с JDK v8.

Прошу, подскажите, что я делаю не так и где взять правильный Xterm?

Игорь Орещенков
Игорь Орещенков | Репутация: 78 (Без статуса) 29 июля 2019 в 21:12

1) Вывод неправильный - пример класса полный и совместим с JDK v8.
2) Взять исходный код Xterm.java из лекции и выполнить его компиляцию - правильный путь (Xterm.java не входит в JDK).
3) По всей вероятности, изложение в курсе ориентировано на использование операционной системы семейства Unix. Вспомогательный класс Xterm использует управляющие последовательности ANSI-терминала (https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F...) для позиционирования курсора и изменения цвета отображаемых символов. Поскольку интерпретатор командной строки Windows cmd.exe не является эмулятором ANSI-терминала, то он эти управляющие последовательности просто отображает "как может", без обработки.
4) Метод inputString () класса Xterm читает байтовый поток, поступающий с клавиатуры, и возвращает объект-строку, сформированную из поступивших байтов, за исключением последнего, под которым подразумевается символ перевода строки. Проблема в том, что в Unix-системах символ перевода строки обозначается одним байтом CR, а в Windows - двумя: CR+LF. Поэтому для Windows строку

return new String (buf,0,i-1);

нужно заменить на

return new String (buf,0,i-2);

После этой модификации и перекомпиляции Xterm.java примеры программ из курса начнут выполняться.
5) Для корректного отображения текста примеров можно воспользоваться эмулятором терминала ConEmu (https://habr.com/ru/post/164687/).

Итог: Судя по последнему снимку экрана, компиляцию программ Вы выполнили правильно, и программа MinDivider запустилась на выполнение. Но завершилась с ошибкой, приняв строку "500" с одним лишним байтом - частью последовательности перевода строки. После выполнения модификации, описанной выше в п. 4, программа должна заработать.

Игорь Орещенков
Игорь Орещенков | Репутация: 78 (Без статуса) 29 июля 2019 в 21:46

По поводу корректного отображения русских букв:
1) Проверьте кодовую страницу, которая используется в командном интерпретаторе cmd.exe с помощью команды chcp. Она должна поддерживать русские буквы (например, 866).
2) Попробуйте указывать кодировку исходных текстов для компилятора:
javac -encoding utf-8 Xterm.java