Перейти до змісту
View in the app

A better way to browse. Learn more.

Файна Україна

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Запускаємо консольні Java програми на Android

Рекомендовані відповіді

Опубліковано
  • Адміністратор

peace_0d9cb5.png

Йтиметься про проект-утилітку, який може стати в нагоді кожному, хто вивчає 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):

peace_0d9cb5.png


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!!!");

Отримуємо виняток:

peace_0d9cb5.png

Введення


Насамкінець, для повноти можливостей, було додано консольне введення. Поки що мої пізнання в області інтерфейсу Android не великі. Абияк впхнутиEditTextвдалося, але результат не ідеальний :)

Запрошення введення рядка (ReadingInputTest):

peace_0d9cb5.png

Далі:

peace_0d9cb5.png

Функції меню

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!).

Для публікації повідомлень створіть обліковий запис або авторизуйтесь

Акаунт

Навігація

Пошук

Пошук

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.