Вы наверное задались вопросом "А что же надо для начала?",здесь вы найдёте всё,что надо Чтобы начать программировать на JavaME, нам понадобится не так уж мало софта. Все три нужные софтины я выложил в одном месте, чтоб Вам не пришлось искать их по всему инету.
Сначала ставим Java 2 Runtime Environment (9 мб). Она представляет собой базовый набор библиотек для замены дебильной мелкософтовской явы нормальной sun'овской. Качаем, запускаем на все вопросы отвечаем положительно. Теперь у нас есть нормальная среда для запуска мидлетов и апплетов.
Теперь нужен Java 2 SDK Это большой пакет порядка 50 Мб, но без него не обойтись - он пригодится не только при компиляции Java2ME из любой среды, но и для изготовления тем, скинов и прочей ерунды для Вашего телефона. Многие средства работы с Java требуют предустановленного Java2 SDK. В пути, указанном к SDK, не должно быть пробелов, лучше вообще его не менять.
Третий шаг - собственно компилятор. даже если Вы позднее будете пользоваться более продвинутыми средствами, как то JBuilder 8 или 9, IntelliJ Idea или Sun Forte, все равно рекомендую поставить "базовый" компилятор Wireless Toolkit или просто WTK от Sun (версия 2.0, весит порядка 10 Мб). В WTK нет встроенного редактора, только компилятор, зато делать проекты там проще простого - ведь писать текст можно и в Блокноте! Запускаем из вложенной папки bin файл ktoolbar.bat, после загрузки нажимаем New Project, в поле Project Name вводим имя проекта, оно же будет именем папки, которую WTK создаст внутри своей вложенной папки apps. Думаю, понятно, что все имена должны быть латинскими и без пробелов. В поле MIDlet class name задаем имя главного класса по тем же правилам, нажимаем Create project. Появляется окно настроек Settings. Как минимум, имеет смысл заполнить поля MIDlet-Vendor (впишите там себя вместо Sun :-), и на вкладке midlets выбрать единственную имеющуюся там запись, нажать внизу Edit и определиться, будете ли Вы рисовать иконку приложения (если нет - сотрите поле Icon). Нажимаем OK, внутри папки apps в папке с именем мидлета создано все необходимое. Файлы *.java выкладываем в src, иконку, картинки и прочие ресурсы, если они есть, в res, а готовый мидлет будем забирать из bin. Для изготовления мидлета достаточно нажать Project->Build, а затем Project->Package->Create Package. Пункт Run позволяет выполнить мидлет в "цветном телефоне по умолчанию" (DefaultColorPhone) или другом эмуляторе.
Вот пример простейшего "Hello, world!" с одной формой, зато грамотно проверяется блокирование повторного запуска и т.п.:
Code
/* Файл midlet.java, главный класс приложения назван midlet,
файл помещен в apps/ИмяПроекта/src */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;
public final class midlet extends MIDlet implements CommandListener
{
/* ВНИМАНИЕ! Команды назначены сразу! */
static final Command exitCmd = new Command( "Stop", Command.EXIT, 2 );
static final Command startCmd = new Command( "Start", Command.SCREEN, 1 );
/* Текстовая форма для адреса. */
private final TextField name = new TextField( "Say \"Hello\" for whom?", "", 255, TextField.ANY );
/* Текстовая форма для результата -- в ответе будет текущие
дата/время опрашиваемого хоста. 255 символов должно хватить. <img src="http://src.ucoz.ru/sm/2/smile.gif" border="0" align="absmiddle" alt="smile"> */
private final TextField rc = new TextField( "Result:", "", 255, TextField.UNEDITABLE );
/* Проверка -- а запущен ли уже мидлет? */
private boolean isStarted = false;
/* Запуск мидлета отсюда. */
protected void startApp ()
{
if( isStarted )
{
return; /* Блокируем повторный запуск мидлета. */
}
/* Собственно, "тело мидлета". */
/* Основная форма мидлета. С ней потом и работаем. */
Form frm = new Form( "Mobile \"Hello, World\"" );
/* Набиваем элементы формы. */
/* Здесь мы вставляем редактируемое пользователем поле. */
frm.append( name );
/* А вот это поле пользователем отредактировано быть не может.
Но его может отредактировать само приложение. */
frm.append( rc );
/* Заставляем форму "слушаться" обработчиков. */
frm.addCommand( exitCmd );
frm.addCommand( startCmd );
frm.setCommandListener( this );
/* Всё. Форма готова -- на экран её, плюс, блокировка
повторного запуска. */
Display.getDisplay( this ).setCurrent( frm );
isStarted = true;
}
/* То, что произойдёт при нормальном останове мидлета. */
protected void destroyApp (boolean b)
{
this.notifyDestroyed(); /* Уведомляем JVM (KVM). */
}
/* На случай "паузы" в мидлете. Если нужна приостановка
работы мидлета, то лучшего места просто не найти. */
protected void pauseApp ()
{
/* На "паузе" можно сохранить состояние экрана. И,
по окончании "паузы", продолжить дальше, восстановив
состояние экрана. Применяется, как правило, в
играх. */
}
/* Обработка команд мидлета. */
public void commandAction ( Command c, Displayable d )
{
String name_str = name.getString( );
if( c == exitCmd )
{
destroyApp( false );
}
else if( c == startCmd )
{
/* Вот тут-то и всё самое страшное и произойдёт... <img src="http://src.ucoz.ru/sm/2/smile.gif" border="0" align="absmiddle" alt="smile">
Если честно, то здесь было бы не хило выставить проверку
на введённые значения, Exception и в Alert'е вывести,
если чего не так, но... мне лень городить огород в демке. */
rc.setString( "Hello, " + name_str );
}
}
}
А в этом приложении уже 2 класса и первый из них вызывает второй - кажется, мы тут квадратное уравнение решаем :-)
/* Файл midlet.java, главный класс приложения назван midlet,
файл помещен в apps/ИмяПроекта/src
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class midlet extends MIDlet implements CommandListener {
public Command exitCommand,calcCommand,backCommand;
private Display display;
private Form f,f2;
private TextField ka,kb,kc;
StringItem res;
float a,b,c,x1,x2;
public midlet () {
display = Display.getDisplay (this);
exitCommand = new Command("Exit", Command.EXIT, 1);
calcCommand = new Command("Calc", Command.OK, 1);
backCommand = new Command("Back", Command.BACK, 1);
}
public void startApp() {
f = new Form ("Equation");
f.addCommand(exitCommand);
f.addCommand(calcCommand);
ka=new TextField ("Input A","",3,TextField.NUMERIC);
kb=new TextField ("Input B","",3,TextField.NUMERIC);
kc=new TextField ("Input C","",3,TextField.NUMERIC);
f.append (ka);
f.append (kb);
f.append (kc);
f.setCommandListener(this);
display.setCurrent(f);
f2 = new Form ("Results");
f2.addCommand(backCommand);
res = new StringItem ("x1 and x2","");
f2.append (res);
f2.setCommandListener(this);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction (Command cc, Displayable dd) {
if (cc == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
else if (cc == calcCommand) {
try {
a=Float.parseFloat (ka.getString().trim());
}
catch (NumberFormatException e) {
new Message (this, f, "Error").show ("Bad A!");
return;
}
try {
new Message (this, f, "Error").show ("Bad B!");
b=Float.parseFloat (kb.getString().trim());
}
catch (NumberFormatException e) {
return;
}
try {
c=Float.parseFloat (kc.getString().trim());
}
catch (NumberFormatException e) {
new Message (this, f, "Error").show ("Bad C!");
return;
}
float d=b*b-4*a*c;
if (d>0) {
x1=(float)(-b+Math.sqrt(d))/(2*a);
x2=(float)(-b-Math.sqrt(d))/(2*a);
res.setLabel ("\n"+x1+"\n"+x2);
}
else {
res.setLabel ("\nNo real roots");
}
display.setCurrent(f2);
}
else if (cc == backCommand) {
display.setCurrent(f);
}
}
}
/* Файл Message.java из той же папки
*/
import javax.microedition.lcdui.*;
public class Message extends Form implements CommandListener {
StringItem label;
midlet midlet;
Displayable parent;
public Message (midlet midlet, Displayable parent, String hdr) {
super (hdr);
this.midlet = midlet;
this.parent = parent;
label = new StringItem ("", "");
append (label);
addCommand (midlet.backCommand);
}
public void show (String s) {
label.setText (s);
Display.getDisplay(midlet).setCurrent (this);
setCommandListener (this);
}
public void commandAction (Command c, Displayable d) {
Display.getDisplay(midlet).setCurrent(parent);
}
}
Возможно, Вы захотите сделать еще 4-й шаг - писать под любимого производителя, тогда, скорей всего, понадобится скачать его Toolkit и эмулятор к нему. Я на вопросы "где" отвечать не буду, для Симензов, например, все есть на http://www.siemens-club.org/
Если хотите спрашивать у нас что-нибудь по теме,ставте NetBeans IDE
Последнюю версию этой среды вы найдёте здесь
после установки главного пакета обязательно установите
Мобильный АДД-ОН
Мы работаем в этой среде,потому всегда готовы помочь советом или исходником!
ЕСЛИ ВЫ СЧИТАЕТЕ ИНФОРМАЦИЮ ПОЛЕЗНОЙ НАЖМИТЕ НА ОДНУ ИЗ ССЫЛОК В БЛОКЕ ОПЛАЧЕННАЯ РЕКЛАМА