Отвечая коротко  -  это сокращенный набор облегченных интерфейсов прикладного программирования Java плюс среда выполнения Java-аплетов. Эта комбинация предназначена для организации работы сетевых программ в потребительских устройствах.

 

PersonalJava можно использовать в интеллектуальных сотовых телефонах, Web-телефонах, справочных системах и т. д. Клавиатура и мышь для них необязательны, а взаимодействие с пользователем в таких случаях осуществляется с помощью типичных для потребительских систем устройств ввода, например дистанционного управления или сенсорного экрана.

 

Первый  шаг:  выбор  цели

 

Приступая к созданию PersonalJava, специалисты фирмы Sun прежде всего постарались определить основные требования, которым должен удовлетворять язык программирования потребительских устройств. В результате они пришли к следующим выводам.

 

- Приложения на PersonalJava должны быть обратно совместимыми с JDK 1.1, т. е. выполняться в стандартной виртуальной машине Java (JVM) и в то же время поддерживать совместимость с JDK-пакетами по объектным связям. Кроме того, пользователям предоставляется возможность обращаться к функциям JDK 1.1 из PersonalJava-аплетов, если те исполняются в стандартной, а не облегченной JVM.

 

- PersonalJava требует гораздо меньше памяти, чем JDK 1.1: 2 Мб ПЗУ для хранения библиотек и 1 - 2 Мб ОЗУ для работы.

 

- Под управлением виртуальной машины PersonalJava будет выполняться большинство Java-аплетов для JDK 1.1.

 

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

 

Выполняя первые три условия, Sun отобрала для включения в PersonalJava лишь десяток основных пакетов классов из комплекта JDK 1.1, а для удовлетворения четвертого требования она ввела в PersonalJava ряд дополнительных методов.

 

Лучше  меньше,  да  лучше

 

Разработчики PersonalJava разделили все входящие в библиотеки классов процедуры на обязательные, необязательные и неподдерживаемые.

 

Это означает, что в любом стандартном интерфейсе должны быть описаны все функции, определенные в JDK 1.1, но обращение к методу, не поддерживаемому PersonalJava, приведет к исключительной ситуации java.lang.UnsupportedOperationException.

 

Право решать, нужно ли включать поддержку необязательных методов в состав конечного продукта, предоставляется производителям ПО. Однако отслеживание всех связей какого-либо класса подобного типа ложится на самого поставщика. Например, класс java.security.interfaceMutual должен поставляться с java.math. Если производитель забыл установить такую связь или обратился к непереопределенному необязательному методу, то опять-таки будет вызвана процедура java.lang. UnsupportedOperationException.

 

Несколько забегая вперед, замечу, что к необязательным относятся, например, классы java.awt.Dialog, java.awt.Frame, java.math, java.security, а также функции для работы с файлами.

 

В PersonalJava вошли следующие компоненты:

 

- java.applet  -  базовый пакет классов для создания Java-аплетов;

 

- java.awt  -  стандартная Java-библиотека для создания графических интерфейсов пользователя (ГИП);

 

- java.awt.datatransfer, который обеспечивает передачу данных между компонентами и аплетами;

 

- java.awt.event  -  пакет для обработки событий;

 

- java.awt.image  -  классы для работы с изображениями;

 

- java.io  -  пакет для обслуживания операций ввода-вывода;

 

- сервисные службы java.lang, java. lang.reflect, java.awt.peer;

 

- java.net, обеспечивающий поддержку взаимодействия с сетями;

 

- java.beans  -  библиотека поддержки JavaBeans-компонентов;

 

- java.util  -  пакет, содержащий интерфейсы для работы с таймером;

 

- java.util.zip  -  функции для работы с архивами (PersonalJava требует по меньшей мере поддержки JAR-архивов).

 

PersonalJava не поддерживает пакеты классов java.rmi, java.rmi. dgc, java.rmi.registry, java.rmi.server, java. security.acl, java.sql, java.text, java. text.resources, которые предоставляют возможности, необходимые лишь для корпоративных приложений. Кроме того, система предлагает далеко не все функции классов java.awt, java.io и java.util, например, в ней отсутствует поддержка окон верхнего уровня, а также некоторые возможности интернациональной работы: они попросту не нужны в бытовых устройствах.

 

Работать  можно  и  без  мыши

 

Одной из основных проблем, которая существует при написании интерактивных программ для потребительских устройств, является возможное отсутствие стандартных PC-механизмов ввода данных.

 

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

 

Например, у потребительского устройства может быть дистанционное управление, имеющее кнопки-стрелки для навигации по окнам и клавишу Go, имитирующую щелчок мыши.

 

Для того чтобы разработчик ПО мог описывать возможности компонентов ввода данных, в пакет классов jawa.awt было введено несколько новых интерфейсов:

 

- NoInputPreffered. Если разработчик имплементировал этот интерфейс, то пользователь не сможет “зайти” в компонент. Примером такого элемента является статический текст;

 

- KeyboardInputPreferred. Задание этого интерфейса означает, что ввод будет осуществляться через клавиатуру. Если клавиатура физически отсутствует, то компонент обязан эмулировать ее каким-либо образом, например, нарисовав ее на экране. Разработчик должен переопределить функцию разрешения передачи фокуса ввода isFocusTraversable так, чтобы она возвращала значение true;

 

- ActionInputPreferred предназначена для выделения “активных” элементов, таких, как кнопки. Разработчик должен позаботиться об обработке событий мыши MOUSE_ ENTER, MOUSE_EXIT, MOUSE_ DOWN и MOUSE_UP;

 

- PositionalInputPreferred указывает на то, что связанный с ним элемент предназначен для измерения координат курсора. Система должна эмулировать (если это возможно) движение мыши и предоставлять механизм для выставления значений координат. Компоненту передаются события MOUSE_ENTER, MOUSE_EXIT, MOUSE_DOWN и MOUSE_UP.

 

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

 

Имплементировать указанные интерфейсы нужно не всегда. Скажем, класс Button и его производные работают правильно даже в тех ситуациях, когда для других компонентов нужно определять метод ActionInputPreferred.

 

С другой стороны, для стандартных элементов Canvas, Component, Container, Dialog, ScrollPane и т. п. один из перечисленных методов все же лучше переписать. Это можно делать без опаски  -  ведь в стандартной библиотеке у данных компонентов все указанные интерфейсы пусты.

 

Приведем несколько примеров. Если устройство имеет и клавиатуру, и мышь, то интерфейсы переписывать не нужно. Если оно оснащено лишь сенсорной панелью, необходимо переопределить только метод KeyboardInputPreferred. На платформе, оснащенной только клавиатурой, можно игнорировать лишь интерфейс KeyboardInputPreferred.

 

Сетевые  протоколы  и  другие  возможности

 

Как я уже говорил, одной из задач PersonalJava является обеспечение работы с сетями. За это ответственен пакет классов java.net.

 

Из пяти основных сетевых протоколов (HTTP, SSL 3.0, Gopher, FTP, SMTP), поддерживаемых в JDK, лишь HTTP является обязательным. Поддержку остальных разработчики могут включать по своему усмотрению.

 

В PersonalJava вошли все те средства работы с изображениями, что имелись в JDK 1.1. Хотя их, в общем-то, и не так уж много  -  ведь обе среды поддерживают лишь форматы GIF 89a, JPEG и XBitmap.

 

В заключение хотелось бы сказать следующее. PersonalJava  -  относительно новая, но уже снискавшая широкую поддержку технология. В этой статье описаны лишь основные ее отличия от стандартного комплекта JDK 1.1. Более подробную информацию на эту тему можно найти на Web-узле фирмы JavaSoft (www. javasoft.com).

 

Недавно о намерении использовать PersonalJava заявили фирмы Samsung, Diba, Alcatel и Nortel. На создание реальных устройств они запросили год. Что ж, подождем и посмотрим, что из этого получится.               4

 

С Владом Борисовым, научным редактором PC Week/RE, можно связаться по адресу: vbor@pcweek.redline.ru.

 

     Влад Борисов

Версия для печати