Опубліковано 4 червня, 20251 р Адміністратор Йтиметься про проект-утилітку, який може стати в нагоді кожному, хто вивчає Java і не завжди має під рукою ПК для перегляду роботи прикладу коду в польових умовах (якось — в метро, маршрутці, кафешці і т.д.).Необхідність створити це притулок виникла коли я готувався до OCJP-сертифікації. Після успішного проходження, вирішив надати плоди своїх задумів на огляд шановним учасникам хабраспівтовариства.Ноутбука у мене немає, а запускати приклади коду на смартфоні, сидячи на кухні за філіжанкою чаю, зручно.Так уже повелося, що більшість прикладів для навчання зазвичай наводиться саме у форматі консольних програм. Чудовий інструмент AIDE дозволяє збирати Android-програму на основі Eclipse-проектів. Можливість, на жаль, недостатня для запуску консольних прикладів методом копіпасти.Справа за малим - перенаправляємо потоки введення/виведення в UI контролі:private static OutputStream mOutputStream = new OutputStream() { @Override public void write(int b) { MainActivity.getInstance().write((byte)b); } }; @Override public void onCreate(Bundle savedInstanceState) { ... System.setOut(new PrintStream(mOutputStream)); System.setErr(new PrintStream(mOutputStream)); ... }Консольна програма стартує в окремому потоці з обробника activity onResume():@Override public void run() { try { // // Здесь запускается консольное приложение // Program.main(new String[0]); } catch (Throwable ex) { // Тут же ловим все исключения setErrorColor(); ex.printStackTrace(); } }Тут можна задавати аргументи командного рядка — старий добрий args. Приклад – запуск BankTellerSimulationна 10 секунд:BankTellerSimulation.main(new String[] { "10" }); Підтримується робота кількох потоків ( SimpleThreadsTest):HorseRaceі BankTellerSimulationприклади складніших багатопотокових додатків (взяті з книги Thinking in Java, 4th Ed by Bruce Eckel ).Помилки часу виконанняПриклад ErrorTest:class FuuuuuuException extends RuntimeException { public FuuuuuuException(String message) { super(message); } } ... throw new FuuuuuuException("!!!TROLLFACE!!!");Отримуємо виняток:ВведенняНасамкінець, для повноти можливостей, було додано консольне введення. Поки що мої пізнання в області інтерфейсу Android не великі. Абияк впхнутиEditTextвдалося, але результат не ідеальний :)Запрошення введення рядка (ReadingInputTest):Далі:Функції менюExitвимикає процес черезSystem.exit(0).Програма "одноразова". Повторних перезапусків немає (не хотілося вовтузитися з очищенням значень статичних полів).Що робитьClear– великий секрет.Що не працює•assert'і Java.assert "Cat".equals("Dog");виняток java.lang.AssertionErrorне кине. Не плутати з assert'ами JUnit - з ними все гаразд !)• Клас Console.• Поле введення не завжди фокусується.Файли проектуВихідники можна забрати з GitHub або скачати zip-архів з проектами для Android Studio і Eclipse.Описані приклади перебувають у пакеті com.examples. Всі приклади можна без змін запускати на звичайному ПК (run everywhere!).
Для публікації повідомлень створіть обліковий запис або авторизуйтесь