Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java15.pptx
Скачиваний:
135
Добавлен:
16.04.2015
Размер:
791.74 Кб
Скачать

Особенности KVM

Пакеты:

java.io, java.lang, java.util (из J2SE)

javax.microedition (свой пакет) – определяет Generic Connection Framework

Особенности реализации:

Не поддерживает работу с числами с плавающей точкой. Пакет java.lang.reflect недоступен.

Пакет java.lang.ref и слабые ссылки недоступны Метод finalize() в классе java.lang.Object недоступен

Поддерживает работу с потоками, но не позволяет создавать потоки-демоны и группы потоков

JNI не поддерживается Безопасность:

Не трбуется в такой степени заботиться о безопасности, как в J2SE

Для поддержки работы с сетью реализована «песочница»

(C) В.О. Сафонов. 2013

Пример программы для

CLDC

Необходимые инструменты:

Java 2 SDK (http://java.sun.com/j2se ) CLDC (http://java.sun.com/products/cldc )

Необходимо указать пути к ним в переменных окружения

Код:

package lecture;

public class GoodByeWorld

{

public static void main(String[] args)

{

System.out.println(“Bye");

}

}

Компиляция:

mkdir tmpclasses

javac -bootclasspath %CLDC_PATH%\common\api\classes -d tmpclasses lecture\GoodByeWorld.java Preverify:

preverify -classpath %CLDC_PATH%\common\api\classes;tmpclasses -d . lecture.GoodByeWorld Запуск:

kvm -classpath . lecture.GoodByeWorld

(C) В.О. Сафонов. 2013

MIDP и MIDlets

CLDC – лишь основа, не допускает общения с пользователем программы. MIDP разработан специально для cell phone, PDA, PalmOS (3.5 и выше).

Требования к аппаратному обеспечению:

Память: по крайней мере 128 KB на загрузку CLDC и 32 KB для программы (Java heap)

Дисплей (по спецификации 96x54 pixels); фактически разные модели телефонов могут иметь свои особенности экранов

Ввод (сравните PalmOS и cell phone) Работа с сетью (поддержка HTTP 1.1)

Требования к платформе (MIDP – некоммерческий продукт, производители могут реализовывать свои версии)

Операционная система должна поддерживать работу с JVM. Если ОС не поддерживает многопоточности, то MIDP должен реализовывать иллюзию многопоточности.

Работа с сетью Доступ к дисплею

Доступ и обработка информации ввода Хранение информации (даже когда устройство выключено)

(C) В.О. Сафонов. 2013

MIDlet Packaging

MIDlet-suite – jar и jad- файлы (java application descriptor – отдельно от jar) Файл манифеста: jar- и jad- файл содержат информацию о MIDlet-suite в форме:

attribute-name: attribute-value

Возможные значения attribute-name: MIDlet-Name – название MIDlet-Version – версия MIDlet-Vendor – поставщик

MIDlet-n – перечисление всех мидлетов, входящих в данную MIDlet-suite MicroEdition-Profile – версия MIDP спецификации MicroEdition-Configuration – конфигурации

MIDlet-Description – описание для пользователя MIDlet-Icon – иконка при запуске

MIDlet-Info-URL – URL, содержащий информации о MIDlet-suite MIDlet-Data-Size – минимальный объем памяти для хранения состояния MIDlet-Jar-ULR – URL, содежащий jar файл с данным MIDlet-suite MIDlet-Jar-Size – размер jar в байтах

MIDlet-Install-Notify – сообщение при установке MIDlet-Delete-Confirm – сообщение при удалении

(C) В.О. Сафонов. 2013

Разработка и инсталляция MIDlet

Для разработки необходимы:

WTK и IDE, поддерживающая возможность создания проектов для J2ME (Sun рекомендует Sun ONE Studio и Borland JBuilder Mobile Edition)

Установка MIDlet suite:

С локального компьютера (через data- кабель)

Через сеть, к которой устройство

подключено (наиболее частый случай

(C) В.О. Сафонов.

2013распространения MIDlet)

High-level API (TextBox)

public class TextBoxMIDlet extends MIDlet

{

private static final int MAX_TEXT_SIZE = 64; protected TextBox textBox;

protected Display display; protected boolean started; protected void startApp( )

{

if (!started)

{

String str = "Look at this!!!";

//InputStreamReader r = new InputStreamReader(getClass( ).getResourceAsStream("resources/text.txt")); //InputStreamReader r = new InputStreamReader(getClass( ).getResourceAsStream("/resources/text.txt")); textBox = new TextBox("TextBox Example", str, MAX_TEXT_SIZE, TextField.ANY);

Ticker ticker = new Ticker("This is a ticker..."); textBox.setTicker(ticker);

display = Display.getDisplay(this); display.setCurrent(textBox); started = true;

}

}

protected void pauseApp( ) {}

protected void destroyApp(boolean unconditional) {}

}

(C) В.О. Сафонов. 2013

High-level API (Commands)

public class TextBox2MIDlet extends TextBoxMIDlet implements CommandListener { private static final Command EXIT = new Command("Exit", Command.EXIT, 0); private static final Command OK = new Command("OK", Command.OK, 0); protected void startApp( ) {

boolean firstTime = !started; super.startApp( );

if (firstTime) { textBox.addCommand(EXIT); textBox.addCommand(OK); textBox.setCommandListener(this);

}

}

public void commandAction(Command c, Displayable d) { if (c == EXIT) {

destroyApp(true); notifyDestroyed( ); } else if (c == OK) {

System.out.println("OK pressed");

}

}

}

(C) В.О. Сафонов. 2013

High-level API (Forms &

Items)

Items, которые могут быть добавлены

Form:

StringItem – отображает строку

TextField – однострочный TextBox

DataField – версия TextField с

возможностью специализированного ввода

Gauge – индикатор

ChoiceGroup – выбор ажение

(C) В.О. Сафонов. 2013

Low-level API (Canvas)

public class AttributesMIDlet extends MIDlet implements CommandListener { private Display display;

protected boolean started; private Command exitCommand; protected void startApp( ) {

if (!started) {

display = Display.getDisplay(this); Canvas canvas = new DummyCanvas( ); Form form = new Form("Attributes");

exitCommand = new Command("Exit", Command.EXIT, 0); form.addCommand(exitCommand);

boolean isColor = display.isColor( );

form.append(new StringItem(isColor ? "Colors: " : "Grays: ", String.valueOf(display.numColors( ))));

form.append(new StringItem("Width: ", String.valueOf(canvas.getWidth( ))));

form.append(new StringItem("Height: ", String.valueOf(canvas.getHeight( ))));

form.append(new StringItem("Pointer? ", String.valueOf(canvas.hasPointerEvents( ))));

form.append(new StringItem("Motion? ", String.valueOf(canvas.hasPointerMotionEvents( ))));

form.append(new StringItem("Repeat? ", String.valueOf(canvas.hasRepeatEvents( ))));

form.append(new StringItem("Buffered? ", String.valueOf(canvas.isDoubleBuffered( ))));

form.setCommandListener(this);

display.setCurrent(form); started = true;

}

}

protected void pauseApp( ) {}

protected void destroyApp(boolean unconditional) {} public void commandAction(Command c, Displayable d) {

if (c == exitCommand) { notifyDestroyed( );

}

}

static class DummyCanvas extends Canvas { protected void paint(Graphics g) {}

}

}

(C) В.О. Сафонов. 2013

Работа с Canvas

protected void paint(Graphics g) – метод для работы с дисплеем

public void setColor(int red, int green, int blue) – установать цвет RGB public void drawLine(int x1, int y1, int x2, int y2) – нарисовать линию

public void drawRect(int x, int y, int width, int heidth) – нарисовать прямоугольник

public void fillRect(int x, int y, int width, int heidth) – нарисовать закрашенный прямоугольник public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) – нарисовать дугу public void translate(int x, int y) – перенести начало координат

Отображение текста: drawChar(…), drawChars(…), drawString(…), drawSubstring(…) Работа с шрифтами: public void setFont(Font font)

Создание изображений: public static Image createImage(…)

public void drawImage(Image image, int x, int y, int anchor)

(C) В.О. Сафонов. 2013

Соседние файлы в папке java1_2013_2014