Первая программа на LWUIT для Java ME

👁 48 просмотров

Цикл статей «Учебник Java ME и LWUIT»

Lightweight UI Toolkit — это легкая библиотека виджетов, вдохновленная из Swing, но спроектирована специально для девайсов, таких, как мобильные телефоны и телеприставки. Lightweight UI Toolkit поддерживает подключаемые, тематизированные иерархии компонентов, контейнеров и абстракции, лежащие в основе GUI. Термин «lightweight»(легкий) указывает на то, что виджеты в библиотеке прорисовываются в Java — исходнике, без нативного рендеринга. Внутренние интерфейсы и абстрактные классы предоставляют абстракцию интерфейсов и API, лежащие в основе профиля конфигурации. Это дает возможность портировать и мигрировать для обеих текущих и будущих профилей устройств. К примеру. Ниже, на рисунке представлена сокращенная иерархия абстракции классов LWUIT

lwuit-classes-simple-sample-ierarh

Библиотека Lightweight UI Toolkit очень строгая и не содержит в себе абстракцию системных сервисов, таких как сеть и память. LWUIT, также, не содержит реализацию нативных графических классов, посредством чего, нельзя и решать проблемы, связанные с UI кардинальными какими-то способами.

Ниже представлена первая программа, которая написана на чистом LWUIT

 

package lwuithello;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.Label;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import javax.microedition.midlet.MIDletStateChangeException;
public class Midlet extends javax.microedition.midlet.MIDlet {
    public void startApp() {
        //Выполняется при старте
        Display.init(this);//Инициализируем дисплей
        //Включаем к программе файл ресурсов
        try {
               Resources r = Resources.open("/res/myresource.res");
               UIManager.getInstance().setThemeProps(r.getTheme(r.getThemeResourceNames()[0]));
        } catch (java.io.IOException e) {}
        //Настройка и показ формы
        Form f = new Form();
        f.setTitle("Hello World");
        f.setLayout(new BorderLayout());
        f.addComponent(BorderLayout.CENTER, new Label("I am a Label"));
        f.show();
     }
    public void pauseApp() {
        //Выполняется в режиме паузы
    }
    protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
        //Выполняется при выходе
    }
}

 

Включение библиотеки LWUIT к проекту

👁 56 просмотров

Цикл статей «Учебник Java ME и LWUIT»

LWUIT — это сборка в виде библиотеки в формате *.jar и прежде, чем использовать весь функционал и возможности LWUIT в нашей программе нам необходимо его, сначала, скачать, обсудить сопутствующие инструменты и включить в проект Java ME.

Для скачивания LWUIT заходим на официальную страницу ORACLE. Перед загрузкой потребуется создание аккаунта на сайте ORACLE и согласиться с лицензией распространения ПО. На момент написания данной статьи, актуальной являлась версия LWUIT 1.5. В архиве вместе с LWUIT находятся несколько полезных инструментов, о которых мы сейчас поговорим.

Открываем архив с проектом и видим в нем несколько папок

LWUIT-zip-archive-ofarticle-img

В папке apps находятся демонстрационные программки, написанные на LWUIT, в папке docs находятся справочные материалы и руководства к использованию LWUIT, в папке lib находятся несколько версий библиотек для написания программ под специфичные задачи для разных платформ, а в папке resource editor находится немаловажная десктопная программа для создания внешних ресурсов для программы, которая способна создавать и изменять интерфейс, стили и схему прорисовки всех элементов, начиная от кнопок и заканчивая формами.

Редактор ресурсов LWUIT

Редактор ресурсов (resource editor) для LWUIT — это обычная компьютерная программа, написанная для платформы Java SE. Запустим ее для ознакомления, зайдя в папку resource editor и нажав на исполняемый файл ResourceEditor.jar

lwuit-res-editor-ofarticle-img

После открытия редактора можно сразу же приступить творить красивый дизайн для нашего проекта Java ME. Редактор позволяет создавать ресурсы, как из существующих шаблонов, которые встроены в программу, так и с нуля, поэтому, в любом случае можно не «потеряться» на начальном этапе проектирования. Рабочая область редактора ресурсов можно поделить на 3 части.

  1. Дерево проекта ресурса;
  2. панель редактирования элементов управления ресурса;
  3. Интерактивный просмотр измененных данных прямо в программе, не имея собранный Java ME проект.

lwuit-res-editor-main-win-ofarticle-img

Пока что сохраним наш ресурс под именем myresource.res где-нибудь, он нам пригодится далее при сборке Java ME приложения для демонстрации живого примера.

Подключение LWUIT к проекту Java ME в NetBeans

Подключение библиотеки LWUIT к проекту Java ME происходит обычным образом. Для этого, сначала создаем проект Java ME с названием LWUITHello

lwuit-add-lib-to-project-from-properties-ofarticle-img

Для подключения библиотеки заходим в папку lib, загруженного до этого архива, и копируем библиотеку LWUIT_MIDP.jar в папку нашего проекта в удобное место и далее заходим в свойства нашего проекта в NetBeans через левую кнопку клавиши мыши, открываем дерево Build и выбираем узел Libraries & Resources и в правой части через кнопку Add Jar/Zip… выбираем библиотеку LWUIT_MIDP.jar, которую мы добавили в папку нашего проекта, жмем «ОК» и все, теперь можно работать спокойно с LWUIT , он у нас уже доступен.

 

 

 

Введение в LWUIT

👁 31 просмотров

Цикл статей «Учебник Java ME и LWUIT»

Библиотека LWUIT(Lightweight UI Toolkit) помогает разрабатывать привлекательный графический пользовательский интерфейс (GUI) для приложений, создаваемые для мобильных телефонов и других устройств с поддержкой Java ME платформы и конфигурации CLDC с профилем MIDP 2.0 и выше.

modern-interface-of-java-me-lwuit-lib

LWUIT поддерживает визуальные компоненты и другие пользовательские ингредиенты интерфейса, такие как тематизация, перемещения, анимации и многое другое.

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

Инструменты разработки и отладки для Java ME

👁 38 просмотров

Цикл статей «Учебник Java ME и LWUIT»

Есть немало инструментов разработки для Java ME платформы. Основными из них можно назвать:

  • IDE NetBeans от сообщества Java — разработчиков;
  • IDE Eclipse — проект, финансируемый IBM;
  • IDE IntelliJ IDEA — коммерческий продукт от Jet Brains;
  • IDE JDeveloper — собственный продукт компании Oracle.

Все эти среды разработки имеют свои плюсы и минусы. Принципиальной разницы на чем создавать проект — нет, так как для всех этих сред разработки есть плагины Java ME и каждый из них можно интегрировать с Java ME SDK и дело тут чисто в том, что вам по душе и на чем привычно писать код.

В данном учебнике, давая дань постам данного сайта, которые уже написаны на NetBeans, будет использована IDE NetBeans. Для эмуляции приложения и проверки кода есть встроенный эмулятор, который предоставляет с инструментами разработки JME SDK.

 

Первая программа на Java ME

👁 55 просмотров

Цикл статей «Учебник Java ME и LWUIT»

В прошлых постах мы рассматривали общий обзор того, что из себя представляет Java ME, рассмотрели конфигурации и профили платформы и прошлись по инструментам разработки и отладки. В данном посте продолжим и создадим начальный пример Hello World и запустим на виртуальном эмуляторе, входящий в Java ME SDK 3.2.

Требуемые инструменты

Для того, чтобы написать код и запустить пример нам необходимо установить следующий набор инструментов:

  • установленный JDK 7 или выше с виртуальной машиной Java;
  • Java ME SDK 3.4 — набор средств для разработки на Java ME, включающий в себя и эмуляторы;
  • Java ME SDK 3.4 Plugins for NetBeans — набор плагинов для NetBeans, скачиваются на официальном сайте, на той же странице и месте, где и Java ME SDK 3.4
  • IDE NetBeans — интегрированная среда разработки на Java. Причем, скачивать c поддержкой PHP. Не будем захламлять NetBeans ненужными, нужные мы сами дальше установим;
  • Плагины Java ME для NetBeans — дополнительно устанавливается через интерфейс NetBeans;

После того, как JDK 7 установлен, Java ME SDK 3.2 установлен и NetBeans установлен неободимо установить на NetBeans дополнительные плагины Java ME для создания проектов Java ME. Установка плагинов осуществляется через интерфейс NetBeans в меню «Сервис»->»Подключаемые модули»

netbeans-modules

Во вкладке «Доступные модули» через поиск вбиваем ключевое слово «Java ME» и устанавливаем все доступные модули, а те, что мы скачали в архиве Java ME SDK 3.4 Plugins for NetBeans(oracle-jmesdk-3-4-rr-nb-plugins.zip) добавляем через то же диалоговое окно, но со вкладки «Загружено», предварительно разархивировав содержимое архива.

Дальше нам настроить среду NetBeans, чтобы она нашла наш Java ME платформу на этапе создания проекта Java ME. Для этого опять заходим в меню «Сервис»->»Платформы Java»

netbeans-java-platforms

Нажимаем  появившемся окне на кнопку «Добавить платформу»

java-me-platform-set-netbeansВыбираем «Эмулятор платформы CLDC Java ME» , жмем далее и выйдет окно выбора папки домашней директории Java ME SDK

select-java-me-sdk-platform-netbeansПосле выбора платформы необходимо поставить галочку на обнаруженную платформу и нажать на кнопку «Готово». Все, настройка завершена, теперь приступим к созданию проекта.

Создание проекта Java ME

После установки всех плагинов и настройки платформы у нас будет возможность создавать проекты Java ME стандартным способом. Для этого переходим «Файл»->»Создать проект…»

create-java-me-cldc-project-netbeans

Выбираем шаблон проекта «Java ME» в категории и «Mobile Application» в проекте, жмем «Далее >»

type-name-and-next

Вводим название нашего проекта и выбираем место хранения, жмем «Далее >»

select-conf-and-profile-and-nextВыбираем платформу эмулятора, конфигурацию и профиль, жмем «Далее >» и «Готово»

our-java-me-project

На данный момент у нас есть пустой проект. Добавим класс «HelloWorld.java» в папку исходного кода, который будет содержать код запуска приложения с выводом на экран записи приветствия «Hello World»:

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.*;

/**
 * @author WebSofter
 */
//Создаем основной класс мидлета(Java ME приложения)
//через наследование класса MIDlet и реализацию интерфейса 
//обработчика команд CommandListener
public class HelloWorld extends MIDlet implements CommandListener{
    private Command cmdExit;//Объект комманды для меню
    private Display dispMainDisplay;//Объект дисплея для вывода
    public HelloWorld(){
        dispMainDisplay = Display.getDisplay(this);//Получаем текущий дисплей устройства
        cmdExit = new Command("Выход", Command.SCREEN, 2);//Создаем команду выхода     
}
    public void startApp() {
        //Создаем новый текст
        TextBox txtHello = new TextBox("Hello World", "Hello World!", 256, 0);
        //Добавляем нашу команду
        txtHello.addCommand(cmdExit);
        //Добавляем слушатель событий
        txtHello.setCommandListener((CommandListener) this);
        //Выводим текст на дисплей
        dispMainDisplay.setCurrent(txtHello);
        
    }
    //Стандартный метод паузы мидлета
    public void pauseApp() {
    }
    //Стандартный метод выхода из текущего окна класса
    public void destroyApp(boolean unconditional) {
    }
    //Обработчик событий, реализованый из интерфейса CommandListener
    public void commandAction(Command c, Displayable s){
        if(c == cmdExit){
            destroyApp(false);//Выходим из мидлета
            notifyDestroyed();//Уведомляем о выходе
        }
    }
}

Необходимо отметить, что в Java название класса должно соответствовать названию файла класса иначе выйдет ошибка. Данный класс содержит основной минимальный код для запуска приложения Java ME, иначе говоря мидлета(MIDlet), так называются программы для Java ME в среде Java.

После того, как класс есть и код для него написан необходимо зарегистрировать данный, главный, класс в свойствах проекта. Для этого нажимаем ПКМ на проекте и выйдет диалоговое окно с настройками проекта

project-properties-winВ разделе «Application Descriptor» во вкладке MIDlets записываем название главного класса, которого мы добавили в проект. Жмем «OK» и запускаем наш проект b мы увидим как запуститься эммулятор и установится в него наш мидлет и запустится автоматически

run-our-midlet-jar

После сборки проекта в директории проекта dist появятся файлы Hello_World.jad и Hello_World.jar.

Актуальность написания приложений под Java ME

👁 49 просмотров

Цикл статей «Учебник Java ME и LWUIT»

Технология запуска приложений на Java не встроена в такие телефоны, где установлены ОС, как Android, iOS, WinPhone, но есть в BlackBerry и Symbian(мертв, чем жив). Отсутствие Java в этих устройствах вызвано лишь коммерцией, а не какими-то техническими трудностями реализации. Но для этого есть сторонние программы и утилиты, которые позволяют запускать поверх ОС Java-приложения, что, не особо впечатляет ни скоростью и ни производительностью. Но, во всяком случае, есть еще миллионы телефонов, на которых, кроме Java, ничего не работает и это, как никак, тоже рынок и сфера разработки, где еще актуальны приложения на Java ME и эта нища будет существовать, так как еще есть потребность в обычных телефонах без выкрутасов.

Для тех, кто хочет перейти на новый уровень разработки на Java для современных мобильных систем можно посоветовать Oracle ADF Mobile.

Oracle Mobile Application Framework (Oracle MAF) — это гибридный мобильный фреймворк, который позволяет  разработчикам быстро построить, с простым кодом, приложения и развертывать их на обеих, на iOS и Android, операционных системах.

Oracle MAF использует для достижения своей цели такие языки и технологии, как Java, HTML5 и JavaScript, предоставляя законченный MVC фреймворк с декларативным пользовательским интерфейсом. Oracle MAF предоставляет, как визуальный, так и декларативный способы разработки для быстрого построения интерфейса.

Возвращаясь к теме можно сказать, что Java ME можно запускать на современных устройствах с ОС Android, iOS, WinPhone через сторонние эмуляторы, но лучше будет, если этого не делать, так как стабильный эмулятор вы вряд ли найдете, а возможность использовать Java ME приложение на этих ОС стремится к нулю и поэтому, лучше, если использовать инструмент по назначению, проектируя приложения именно для телефонов, которые ориентированы на приложения на Java ME, которые сейчас выпускаются еще в немалом количестве.

Статистика актуальности разработки на Java ME для телефонов

На данный момент, по данным портала NetMarketShare на сентябрь 2015 года, подавляющее большинство смартфонов идут с ОС Android — 57,29 мирового рынка, за Android идет iOS — с 35,43% , далее идет WinPhone с количеством в 2,58% доли мирового рынка мобильных ОС, далее идет наш Java ME  с количеством в 1,85% доли рынка.

img-statistic-of-mobile-apps

Находясь, даже, на 4-ом месте, платформа Java ME имеет уже какой-то смысл разработки, так как в рабочей обстановке любой человек пользуется обычным телефоном, который имеет кнопочную клавиатуру для удобства пользования и в ней же есть платформа Java ME — в обязательном порядке.

 

Технология Java ME в 2016

👁 28 просмотров

Цикл статей «Учебник Java ME и LWUIT»

Java — платформа серии Micro Edition(Java ME) предоставляет надежную, гибкую среду для запуска программ на встраиваемых и мобильных устройствах, способных обмениваться в среде Интернет: микроконтроллеры, сенсоры, шлюзы, мобильные телефоны, PDA, телевизоры, принтеры и многое другое. Java ME включает гибкий пользовательский интерфейс, надежную безопасность, протокол построения через сеть и возможность обновлять ПО через сеть динамически. Приложения, написанные для платформы Java ME портируются для многих устройств, где стоит Java -машина и используют только те возможности, которые предлагает данное устройство.

Прежде, чем приступать к изучению платформы Java ME полезно знать место этой технологии в общей базе языка программирования Java. Как было сказано выше, Java ME делится на подклассы устройств, которые имеют свои специфичные функции, поэтому такое разделение — это логичный подход. Основные разделения данной платформы это:

  • конфигурации;
  • профили.

java-me-platform-ralization-scheme

Конфигурации Java ME

Java ME специфицирует две базовые конфигурации, которые определяют требования к виртуальной машине (ограничение набора допустимых инструкций и др.), а также минимальный набор базовых классов: CLDC (Connected Limited Device Configuration — конфигурация устройства с ограниченными ресурсами и коммуникационными возможностями) и CDC (Connected Device Configuration — конфигурация устройства с нормальными ресурсами и коммуникационными возможностями).

Конфигурация CLDC успешно используется в обычных мобильных телефонах и портативных органайзерах, в которых встроена Java — машина KVM(Java Kilobyte Virtual Machine).

Профили Java ME

Java ME предоставляет несколько профилей, которые расширяют и функционально дополняют конфигурации, определяя модель приложения и возможности графического интерфейса, а также функции коммуникации через Интернет и т.д.

В настоящее время самой распространённой конфигурацией является CLDC, для которого разработан профиль MIDP (Mobile Information Device Profile — профиль для мобильного устройства с информационными функциями). Приложения, написанные для этого профиля, называются мидлетами (англ. MIDlet). Другим популярным профилем для CLDC является DoJa, разработанный фирмой NTT DoCoMo для её собственного сервиса iMode. iMode весьма распространён в Японии, и в меньшей степени в Европе.

MIDP (англ. mobile information device profile) — профиль для мобильного телефона с информационными функциями (платформа JME). MIDP располагает понятием мидлет — компактное приложение на языке Java, имеющий небольшой размер, что делает его пригодным для передачи по сети и установки на мобильном устройстве с ограниченным ресурсом.

Простыми словами можно утверждать, что CLDC определяет характеристики самого устройства: память, дисплей, процессор…, а MIDP определяет характеристику приложения, которая работает поверх характеристик CLDC. Помимо MIDP существует IMP, который считается устаревшим. Последней версией MIDP является версия 2.1.

Java ME и LWUIT. Введение в Java ME

👁 43 просмотров

Цикл статей «Учебник Java ME и LWUIT»

Компактная версия платформы Java (Java ME) представляет собой надежную и настраиваемую среду для приложений, работающих на мобильных и встраиваемых устройствах: мобильных телефонах, цифровых приемниках, проигрывателях дисков Blu-ray, цифровых устройствах хранения данных, модулях M2M, принтерах и других устройствах

java-me-appas-for-mobile-phones-article-step-by-step

Технология Java ME изначально разрабатывалась для преодоления ограничений, связанных с созданием приложений для компактных устройств. С этой целью компания Sun Microsystems(купленная ныне Oracle) разработала технологию Java ME, которая способна соответствовать подобным техническим ограничениям и позволяет создавать Java- приложения, работающие на компактных устройствах с ограниченным объемом памяти, диагональю экрана и зарядом аккумулятора.

Технология Java ME делится на подклассы технологий, которые специфичны для ряда устройств в виду различия их функциональности и ограничений, поэтому нельзя говорить, что Java ME — это технология, которая придумана именно для написания приложений для телефонов. В данном учебнике подразумевается, что мы изучаем технологию Java ME, которая охватывает подкласс устройств, связанные с телефонами.

LWUIT. Формы. Установка заднего фона формы

👁 39 просмотров

Формы в Java ME — это верхнеуровневые компоненты, которые служат корневым элементом в интерфейсе LWUIT — библиотеки. Часто требует разметить фото на заднем фоне формы и подогнать сразу под размеры экрана. Для установки и масштабирования, под скрин, заднего фона в виде картинки в форме можно воспользоваться следующим кодом:

Image iMBanner;
try {
    iMBanner = Image.createImage("/res/main-banner.png");
    fLBanner.setLayout(new BorderLayout());
    fLBanner.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
    fLBanner.setLayout(new BoxLayout(BoxLayout.X_AXIS));
    fLBanner.getStyle().setBgImage(iMBanner);
    fLBanner.getStyle().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED);
} catch (IOException ex) {
    ex.printStackTrace();
    System.out.print("Error\n\n"+ex.getMessage());
    fLBanner.addComponent(new Label(ex.getMessage()));
}
fLBanner.show();