- •Что Вам необходимо?
- •Создание miDlet-а
- •О том, что скрыто от наших глаз
- •А дальше?
- •Ресурсы
- •Инсталяция и запуск Tomcat
- •Написание исходного кода Servlet-а
- •Компиляция Servlet – а
- •Как обратиться к Servlet-у из miDlet-а
- •Развертывание Servlet-а
- •Замечания
- •Заключение
- •Дейтаграммы
- •Получение Web контента
- •Когда какой протокол использовать?
- •Стек протоколов
- •Профили
- •Bluetooth устройства и сети
- •Системные требования
- •Java api For Bluetooth — организация и пакеты
- •Анатомия miDlet-ов, использующих jsr 82
- •Использование Java apIs for Bluetooth
- •Использование Bluetooth в j2me приложениях. (jsr-82) - Часть 2. Обзор Connection и Device Management api Обзор Connection api
- •Типы Bluetooth соединения
- •Создание соединения
- •Ожидание соединения
- •Отправка и получение даннях
- •Обзор Device Management api
- •Удаленное устройство
- •Класс устройства
- •Получение информации о настройках Bluetooth устройства
- •Интерфейсы pim api
- •Классы pim api
- •Использование pim api
- •Использование эмулятора j2me Wireless Toolkit 2.2 для тестирования pim списков
- •Особенности спецификации Sony Ericsson
- •Свойства системы
- •Классы и интерфейсы FileConnection api
- •Операции ввода/вывода
- •Получение информации о файлах и каталогах
- •Вычисление Экспоненты
- •Гиперболические функции
- •Вычисление натурального логарифма
- •Вычисление арксинуса и арккосинуса
- •Вычисление арктангенса
- •Обзор mmapi
- •Механизм обработки мультимедмйной информации
- •Mmapi пакеты
- •Использование mmapi
- •Последовательности нот
- •Проигрывание мультимедийных файлов
- •Воспроизведение видео
- •Использование камеры
- •Поддерживаемые форматы
- •Ограничения использования mmapi в wtk
- •Пример простого медиаплеера
- •Создание midp приложения с использованием Visual Designer-а.
- •Редактирование Java исходников
- •Создание midp приложений с использованием Source Editor Создание нового j2me midp проекта
- •Редактирование Java исходников
- •Компиляция и запуск проекта
- •Выбор платформы эмулятора
- •Использование конфигурирования
- •Добавление конфигурации
- •Настройка конфигурации
Настройка конфигурации
Число конфигураций, которое Вы можете добавить в проект, не ограниченно. Для настройки созданной конфигурации используйте диалоговое окно Project Properties.
Щелкните правой клавишей на узел MyHello Project и выберите Properties. В диалоге Properties выберите Platform. В результате откроется диалог J2ME MIDP Configuration.
Выберите в выпадающем меню созданную нами конфигурацию BlackWhiteDisplay.
Все компоненты диалога Platform недоступны. Поскольку эта конфигурация по умолчанию устанавливает значения конфигурации Default. Снимите галочку с поля Use Default Project Configuration Values внизу диалога. Теперь все компоненты диалога доступны.
Измените настройку Device на DefaultGrayPhone.
Переключите Project Configuration диалог вверху диалога Properties. Обратите внимание, Настройки Device изменились на выбранные в настоящий момент. Этот метод настройки конфигурации работает для каждой панели диалога. Нажмите OK, чтобы сохранить изменения и закройте диалог Properties.
Додаток № 2
Как загрузить текст из файла в J2ME
При разработке мидлетов, довольно часто бывает нужно загрузить какие-нибудь данные из текстового файла в переменную. На одном из форумов по j2me программированию я наткнулся на простую реализацию метода, позволяющего считывать данные из ASCII текстового файла.
private String getText(String path) {
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream(path));
StringBuffer strBuff = new StringBuffer();
int ch = 0;
try {
while ((ch = dis.read()) != -1) {
strBuff.append((char ) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
}
dis.close();
} catch (Exception e) {
System.err.println("ERROR in getText() " + e);
}
return strBuff.toString();
}
Для того чтобы использовать этот метод, необходимо подключить к java мидлету пакеты java.io.*. В качестве параметра методу getText передается путь к файлу. Корневой считается папка res/ вашего проекта. То есть, getText(«/book.txt») загрузит файл <Ваш проект>/res/book.txt. (Дело в том, что после сборки jar архива файлы из папки ресурсов помещаются в ту же папку, что и откомпилированные файлы классов.)
Как видите, все просто. Создается входящий поток данных dis, связанный с текстовым файлом, откуда побайтно читаются данные в строковый буфер strBuff, который потом преобразуется в строку и возвращается из метода.
Пожалуй единственным не очевидным моментом в коде метода является строчка:
strBuff.append((char) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
Дело в том, что если использовать строчку
strBuff.append((char)ch)
то данные тоже будут считываться, но у нас возникнут проблемы с русскими буквами при отображении. Эта строка нужна для корректного перевода русского текста из кодировки ASCII в Unicode.
Предлагаю разобраться с принципом работы метода на простом примере. Создайте новый мидлет. Я использовал SampleMidlet каркас из статьи «Пишем софт для телефона». Давайте Создадим форму и добавим на нее StringItem, в который и загрузим текст из файла. В общем, у меня получилось следующее.
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
//Подключаепм пакет для работы с вводом/выводом
import java.io.*;
public class SampleMIDlet extends MIDlet implements CommandListener{
private Display display;
private Form MainForm; //Форма
private StringItem StrFromTxt; //Сторка, которая будет грузиться из текстового файла
private Command CMD_EXIT = new Command("Выход", Command.EXIT, 1); //Комманда выхода из мидлета
public SampleMIDlet(){}
protected void destroyApp( boolean unconditional ) throws MIDletStateChangeException
{
exitApp();
}
protected void pauseApp(){}
protected void startApp() throws MIDletStateChangeException
{
if( display == null )
{
initApp( ); // Этот код выполняется при запуске мидлета
}
}
private void initApp()
{
display = Display.getDisplay( this );
MainForm = new Form("www.MobiLab.ru"); //Создаем форму
MainForm.setCommandListener(this); ///Ловим команды от формы
MainForm.addCommand(CMD_EXIT); //Добавляем кнопку «Выход» на панель
String str=getText("/book.txt"); //Грузим в текстовую переменную данные из файла
//Создаем StringItem компонент на основе загруженного текста
StrFromTxt = new StringItem("?????: ",str);
MainForm.append(StrFromTxt); //Добавляем на форму компонент с текстом
display.setCurrent(MainForm); //Отображаем форму
}
public void exitApp()
{
notifyDestroyed(); // уничтожение MIDlet-а
}
public void commandAction(Command c, Displayable d) {
if (c == CMD_EXIT){exitApp();} //Команда "Выход"
}
private String getText(String path) {
DataInputStream dis = new DataInputStream(getClass().getResourceAsStream(path));
StringBuffer strBuff = new StringBuffer();
int ch = 0;
try {
while ((ch = dis.read()) != -1) {
strBuff.append((char ) ((ch >= 0xc0 && ch <= 0xFF) ? (ch + 0x350) : ch));
}
dis.close();
} catch (Exception e) {
System.err.println("ERROR in getText() " + e);
}
return strBuff.toString();
}
}
Cоздадим в папке /res/ проекта текстовый файл book.txt с каким-нибудь текстом. Все, можно запускать и тестировать приложение.
Загрузка числовых данных из файла
В своих проектах я часто использую конфигурационные файлы, куда помещаю разную текстовую и числовую информацию. Для разделения информации я использую символы-разделители (обычно '|'). Для того чтобы загрузить информацию в переменные, нужно считать ее из файла с помощью уже рассмотренного метода getText(), а затем вычленить данные выполняя поиск символов разделителей. После того как данные вычленены, их можно перевести в необходимый формат (int, double).
Рассмотрим пример. Пусть в конфигурационном файле содержится три параметра: Имя пользователя, его год рождения и вес(с точностью до грамма :) ). Создадим в папке res проекта файл config.ini с текстом
Василий|1973|86.998|
Создадим класс подобный рассмотренному Выше. Изменения коснутся только метода initApp():
private void initApp()
{
display = Display.getDisplay( this );
MainForm = new Form("www.MobiLab.ru"); //Создаем форму
MainForm.setCommandListener(this);
MainForm.addCommand(CMD_EXIT);
display.setCurrent(MainForm); //Отображаем форму
//Прочитаем из текстового файла строку
String str=getText("/config.ini"); //Грузим файл конфигурации в строковую переменную
int i0=0, i=0;
String s1; //Вспомогательная строка. (исключительно для наглядности)
i = str.indexOf("|",i0+1); //Ищем символ "|" в строке, начиная с i0+1 буквы
String Name=str.substring(i0,i); //Выделяем часть строки с i0 по i-ый символ
i0=i;
i = str.indexOf("|",i0+1); //Ищем следующий символ
s1=str.substring(i0+1,i);
int Year=(int)Integer.parseInt(s1); //Преобразуем строку в число
i0=i;
i = str.indexOf("|",i0+1); //Ищем следующий символ
s1=str.substring(i0+1,i);
double Weight=(double)Double.parseDouble(s1); //Преобразуем строку в вещественное число
StringItem SI1= new StringItem("Имя: ",Name);
StringItem SI2= new StringItem("Год: ",""+Year);
StringItem SI3= new StringItem("Вес: ",""+Weight);
MainForm.append(SI1);
MainForm.append(SI2);
MainForm.append(SI3);
}
Как видите, ничего сложного.
Загружаем в i0 номер номер последнего найденного символа.
С помощью метода indexOf() ищем следующий символ, начиная с i0
С помощью substring вырезаем часть строки и помещаем ее в новую переменную
Преобразовываем строку к необходимому нам типу
возвращаемся на шаг 1
Додаток № 3
Как настроить Tomcat
Добавить переменную среды JAVA_HOME, указывающую на установленный JDK.
В файл tomcat-users.xml добавить пользователя, например:
<role rolename="manager"/>
<role rolename="standard"/>
<user username="user" password="pwd" roles="standard,manager"/>
