Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java ME (J2ME) > Введение в Java ME с помощью IDEA |
Автор: Platon 2.10.2006, 16:28 | ||||||||||
Здравствуйте уважаемые. Решил попробовать писать в Java ME но что-то заминка на самом старте. Использую Idea. Стандартная прога срисованная с книжки.
хочу посмотреть что получится, дебажу. Запускаю. В консоли:
Ооо, миленький сотовый ![]() дальше какое то окно с ошибкой
Жму ОК дальше в консоли
жму на сотовом кнопочку Launch, выделен пункт Mid.Mid
Конечно я рад, что процесс завершился без ошибки, но все таки хотелось бы увидеть как она проходит свой путь и какие действия совершаются в сотовом... |
Автор: batigoal 2.10.2006, 21:32 |
Отправлю все-таки в J2ME - там скорее ответят. |
Автор: Slavca 3.10.2006, 05:31 |
Наверное, ты используешь WTK версии выше, чем 2.0. У меня, например, на WTK2.0 запускается без проблем. А на WTK2.2 вылазиет то что видишь ты. Проблема кроется в том что idea не производит верификацию классов (или, может, производит но как-то не так). Если ты сделаешь следующее, то у тебя должно получиться.
Минус такого подхода - большой: файлы копировать надо, отладку не запустить т.д. Есть еще вариант - написать ant-скрипт для сборки. Вот ссылка с примером: http://developers.sun.com/techtopics/mobility/midp/articles/ant/index.html Если получится с идеи запускать - ты напиши как. Полезно. |
Автор: Dancer 3.10.2006, 10:00 | ||||
совсем это не выход. Проще подредактировать файлик для сборки через Ant, и работать прямо из IDEA. У меня WTK 2.2 работю напрямую из IDEA. (4.5 с плагином) В 5.0 то же приходится подправлять build.xml ручками, но это не так сложно как кажется ![]() Сейчас расскажу где и что нужно править. Хотя я это уже кому то здесь рассказывать, но может быть это было по переписке, точно не помню. Так что если вдруг кто-то увидет, что что-то похожее я ему уже рассказывал, пусть выложит здесь, чтобы весь честнОй народ знал. И так, приступим. ============================ Есть у нас IDEA 4.5 с плагином J2MESupport, и есть у нас WTK 2.2 (отступлюсь чуть-чуть от темы) Надеюсь что плагин вы установили правильно, иначе без этого в принципе никак ![]() Устанавливаем плагин. 1. Скачиваем это самый J2MESupport с сайта IDEA. (то есть у нас должен быть файлик j2mesupport.jar) 2. У нас должна быть установлена сама IDEA 4.0 или 4.5 (для версии 5.0 этот плагин уже идёт в поставке) 3. Заходим в папочку где установлена IDEA. Далее в plugins. 4. Создаём папочку j2mesupport, заходим в неё и создаём папочку lib. 5. В созданную lib кладём наш j2mesupport.jar Вот вроде бы и всё. Но тут то же есть одна небольшая хитрость. Нам нужно либо прописать наш j2mesupport.jar в CLASSPATH, так как из него нам будет очень необходим один класс, для сборки через Ant нашего мидлета. Либо, можно выковырять из j2mesupport.jar этот нужный файлик и подложить его в ant.jar. Я в принципе всегда подкладываю, так надёжнее ![]() Файлик который нам нужен - FileSize.class находится он в j2mesupport.jar /org/apache/tools/ant/taskdefs Положить его нужно в - ant.jar (тот которым вы пользуетесь для сборки проектов), правильнее сказать, нужно положить всю папочку org из j2mesupport.jar в ant.jar. Если вы используете Ant из IDEA то он находится в папке где установлена IDEA (далее буду называть её IDEA_ROOT), IDEA_ROOT/lib/ant/lib Ещё один способ, скопируйте в IDEA_ROOT/lib/ant/lib ваш j2mesupport.jar. Удалите из j2mesupport.jar всё, кроме папок META-INF и org. Будет вам счастье ![]() Так-с, плагин установил. Смотрим, что он у нас повился: 1. Запускаем IDEA 2. Создаём новый проект, или же открываем уже существующий. (Как небольшое отступление, нету в мидлетах public static main(String str[]){}. Плиз, не нужно этого делать......) 3. При создании нового проекта (обзову его FakeProject), выбираем где он будет у нас сохранён, далее говорим какую Java будем использовать (у меня лишь 1.4.2_12, так что её то я и выбираю ![]() 4. Выбираем Create singe-module project 5. Java Module (в типе модуля) 6. Далее указываете, где будут у вас исходники, клссы и т.д. Вот мы и получили новый проект, под названием FakeProject. Давате теперь настроим в нём весь необходимый Environment, который нам нужен будет для работы ![]() 1. Идём в Settings (Ctrl+Alt+S) или тыкаемся по иконке с гаечным ключом и гайкой-шестерёнкой (хрен её разберёшь). 2. Выбираем во вкладке Project J2ME Support 3. Указываем WTK Home (нажав на три точки, выбиаем папку, где установлен WTK) 4. Устанавливаем галку в checkBox J2ME Support 5. Как только галку эту поставим, вылезает диалоговое окошко, с вопросам где будет наш мидлет, какие в него будут входить классы и так далее. 5.1. Выбираем ProjectName и Project Home для нашего мидлета, я их оставлю теми, что предлагается по умолчанию (FakeProject D:\tmp\FakeProject) -> Next 5.2. Suite Name оставляю FakeProject (подставленный по умолчанию), тыкаемся в плюсик в Midlets in suite (добавляем мидлеты, которые у нас будут в сьюите, в принципе очень часто в сьюите оказывается лишь один мидлет, но можно их держать и несколько. По спецификации можено до 5, но всё зависит от производителей устройств) 5.3. Вводим Midlet name и Midlet class (точно так же как и в WTK, это не означает, что вы должны такой же проект заводить и в WTK, это я просто аналогии провожу ![]() 5.4. Не мудрствуя лукаво я вписал Midlet name: FakeProject, Midlet class: Hello (Press-> Add) 5.5. Clean old build (я предпочитаю это оставлять выставленным, чтобы предыдущий билд вычищался перед новым простроением. Если проект очень большой и какие-то части не изменяются, то на этом можно сильно сэкономить. Но здесь каждый решает сам, что ему выбирать) 5.6. Deploy Path - выбираем local, и выбиаем папку, в которую будем деплоить. Я заметил ошибки, если выбирать в качесте папки для деплоинга BIN, так что советую выбирать DIST. Но возможно это у меня лишь была такая ошибка. (в общем, я меняю bin на dist, в качестве Deploy path (Press -> Finish) 5.7. Попадем в окошко J2ME Support, там жмём OK (если что-то нужно менять, меняем и жмём ОК ![]() 6. Получили скелет МИДЛЕТА,
7. Если нужно использовать какие-то специфические библиотеки (например JSR-75), это нужно будет подключить самостоятельно в Libraries нашего проекта. 8. Пишим код, или тырим его где нить, вставляем всё что нужно куда нужно, и получаем готовый исходник (готовый к компиляции)
9. Выбираем Build (в верхнем меню), выбираем Generate Ant Build 10. получаем build.xm файлик для нашего проекта. Далее выбираем вкладочку AndBuild (она находится там же где и J2ME Support (правая граница экрана). Там жмём на плюсик и выбираем наш созданный build.xml для проекта FakeProject. (этот файлик будет сохранён в корне проекта) 11. выбираем task dist (жмём на него пару раз мышой, получаем компиляцию нашего проекта) 12. После успешной компиляции в папке dist нашего проекта будет находится FakeProject.jad и FakeProject.jar 13. Открываем J2ME Support (вкладка, рядом с AntBuild рядом с правой границей экрана, ну или правой границей окна IDEA) 14. выбираем телефон, на котором будем пускать наше приложение (Default Gray Phone, Default Color Phone и т.д.) 15. Жмёт на кнопочку Play (ну или как её обозвать не знаю, зелёный треугольничек) или же Ctrl+Alt+R 16. Ещё раз жмём в выскачившем окошке Run. И наслаждаемся нашим приложением. Для того чтобы делать Debug: 1. Делаем всё что было описано ранее, то есть все действия, которые нам позволят запустить приложение в эмуляторе из-под IDEA. 2. Выбираем Run (пункт из меню ), в нём выбираем EditConfigurations 3. Выбираем вкладку Remote в окошке Run/Debug configurations 4. Жмём на плюсик, то есть добавляем Remote сервер (ну, назовём его так) 5. В прниципе, можно здесь ещё кое-чего поконфигурить, но сейчас можно всё оставить по умолчанию, в том числе и имя (Unnamed). Жмём -> OK 6. Ставим где нибудь в тексте точку останова (я вот ткнул в линию, где mainForm.setCommandListener(this); из текста приведённого выше) 7. Далее в J2ME Support (откуда ранее запускали приложение) жмём на "жучка", то есть запускамся в Debug mode. 8. Далее Shift+F9, или же жмём на "жучка с кнопкой Play" который располагается рядом с гаечным ключом на панеле инструментов. 9. Жмём на кнопку Debug (наш, с позволения сказать сервер, Unnamed должен быть выбран в этом качестве, друго пока мы не делали ![]() 10. Далее идём к нашему запустившемуся эмулятору телефона. 11. Нажимаем на кнопку Launch (то есть запускаем наше приложение). 12. УРА!!!! Срабатывает точка останова, мы попадаем в IDEA, и можем дебажить на код. Смотреть во что выставленны переменные и т.д. На этом я пожалуй закончу ( что нужно править в build.xml отпишу как-нить в другой раз. Сейчас нет времени, сорри.) |
Автор: Platon 3.10.2006, 10:43 |
Здравствуйте, уважаемый Dancer, я являюсь счастливым обладаетелем IDEA 5.1 но не нашел указанного вами файла j2mesupport.jar. По логике я подумал что это может быть j2meplugin, но в нем нет ни папки org, ни файла FileSize. ![]() Добавлено @ 10:57 Slavca, спасибо, конечно, работает, но все же хотелось бы через идею все это прокручивать |
Автор: W0LF 3.10.2006, 20:02 |
В идее 5.0 уже плагин не нужен. И она преверифает нормально кстати. Правда я в нее ант+антенна все-таки вставил благодаря Dancer'у ![]() |
Автор: Dancer 5.10.2006, 11:26 | ||||||
Такс, как и обещал - продолжаю. Значить, ранее получили мы с вами build.xml используем его и нам от этого СЧАСТЬЕ! Но пришлось нам например определённый jar добавить к нашему проекту (пусть это будет JSR-75, то есть хотим использовать файловую систему телефона) Заходим в build.xml отыскиваем
и меняем его на
Очень рекомендую здесь прописывать самим те JAR-ы которые вы используете у себя в проекте. Если нужны буду какие-то другие специфические API и они у вас не будут находится в WTK_ROOT/lib то нжуно будет добавить ещё одну секцию (ниже приведено, для примера)
Если посмотреть в корневую папку проекта, где вы его сохранили, то там вы обнаружите три очень замечательных файлика ![]() midlet.properties В этом файлике вы устанавливаете все переменные, в те значения в которые нужно (ну, автоматически они конечно установятся на стадии когда вы вызываете в IDEA плагин J2MESupport и включаете его), но иногда нужно же что-то поменять, и т.д. Так вот, в этом файлике прописываются все необходимые значения. Версия вашего мидлет, его имя, названия классов для запуска мидлетов, название сьюита. Пути к библиотекам, которые вы будите подключать в build.xml. версии CLDC и MIDP для вашего мидлета. и много чего ещё. Советую вам его открыть в редакторе (хотябы Notepad) и посмотреть самим. Там всё очень понятно. Вот покажу лишь один пример: переменная toolkit.home.dir=C\:\\my\\WTK_22 это означает, что WTK у меня расположено по пути C:\my\WTK_22. Значение этой переменной вы используете в своём build.xml файле (к примеру: <fileset dir="${toolkit.home.dir}/lib">). Если вы поставите другой WTK или симулятор от производителя, вам лишь нужно будет поменять путь для toolkit.home.dir и будет вам счастье (если же симулятор от производителся будет иметь структуру подобную WTK. Хотя как правило производители придерживаются данной структуры. ) Заострю ваше внимание на \: и \\ - это ВАЖНО!!!. символ \ - это показывает парсеру, что за ним идёт специальный символ, и его никак не нужно обрабатывать. (посмотрите про escape-последовательности и всё думаю будет понятно) Manifest.tmpl Это файл шаблон для вашего Manifest.mf файла, который будет располагаться в JAR META-INF/Manifest.mf. (это файл необходим для всех мидлетов, и вообще для всех JAR-архивов. Хотя конечно архив - как архив он может жить и без него, но для всего остального он просто необходим. Не буду на этом останавливаться, о Manifest можно почитать в соответствующей литературе ![]() Если взглянуть на этот файлик (открыть на просмотр или редактирование) мы видим что продолжаем использовать переменные, которые мы выставили в midlet.properties. Для примера, рассмотрим MicroEdition-Configuration. Это обязательный параметр для всех мидлетов, и этот параметр должен присутствовать и в JAD и JAR (читаем спецификацию JSR-118), и мало того, в JAD и JAR этот параметр должен совпадать. Для того чтобы нам не налажаться с версией используем переменную j2me.cldc.version которая у нас выставляется в файле midlet.properties. (У меня она выставлена так: j2me.cldc.version=CLDC-1.0). Так вот, а используете вы это в файле Manifest.tmpl как @j2me.cldc.version@ и уже в файле Manifest.mf у вас появится MicroEdition-Configuration: CLDC-1.0 Ну и так далее. А когда нужно будет поменять версию, вы это легко сделаете в вашем midlet.properties и пересобирёте ваш мидлет. jad.tmpl Это то же файл-шаблон, но уже для JAD файла вашего мидлета. Сюда так же вы может добавлять собственные переменные, как и в обычный JAD файл (это и для JAR справедливо). В нём тот же принцип поведения с переменными, которые устанавливаются в midlet.properties как и для Manifest.tmpl ---------------------------------- Имеются ещё два XML файлика, про которые стоит упомянуть. YOUR_PROJECT_NAME.xml module_YOUR_PROJECT_NAME.xml где YOUR_PROJECT_NAME - это имя вашего проекта (как помните, я ранее создавал проект с именем FakeProject, поэтому у меня эти фалйики соответственно обзываются fakeproject.xml и module_fakeproject.xml) fakeproject.xml - в нём содержится информация по вашему проекту, где располагается Java SDK, какие либы(библиотеки) вы подключили к своему проекту, ни и всё в этом роде. Главное отсюда - это JDK. module_fakeproject.xml - это настройки непосредственно по модулу J2ME Support. Где располагается WTK, какие cldcapi и midpapi вы используете по умолчанию, в каких папках у вас будут находится исходники, куда будут складываться классы и где будет выкладываться JAD/JAR. Здесь стоит остановиться поподробнее. У меня не получилось нормально сконфигуряться (ещё ни разу, но возможно это я такой балбес и руки у меня кривые) из самой IDEA, то есть повыставлять галочек, выбрать что хочу и вуаЛя. (особенно это касается midpapi20.jar и cldcapi10.jar). То есть, выставляю я их в то что мне нужно. а потом обратно открываю этот модуль и получаю, что cldc у меня убежало в 1.1). Но в общем то это..... фигня, когда на эмуляторе, но когда начинаешь заливать в телефон будут проблемы (многие думаю знают, кто не знает - узнает позже ![]() Ну вот, вроде бы про видимые подводные камни рассказал. Как с этим бороться то же, попытался "донести". Как дебажить начать в IDEA вроде бы то же объяснил. (если нет, то задавайте вопросы в этой ветке, по мере возможности буду отвечать) За сим, разрешите откланяться ![]() P.S. Если найдёте какие-то неточности во всей этой лабуде, что-то будет не так работать как написано, плиз пишите сюда, чтобы МЫ все вместе исправляли эти "затыки" и пополняли свой "багаж знаний" |
Автор: mamon4ik 27.10.2006, 10:53 |
Как заставить IDEA нормально преверифицировать код ? при сборке через ant на верификации валится с ошибкой - не может найти jar.exe если скопировать его из jsdk в папку проекта, то всё нормально собирается, но копировать jar.exe в каждый проект - это неправильно... как я понял, надо jar.exe куда-то прописать, чтобы при вызове он брался из папки с jsdk а не из текущей папки, но как это сделать ? |
Автор: Dancer 27.10.2006, 10:59 |
смотрим в сторону переменных PATH и CLASSPATH В PATH нужно прописать путь до JAVA_HOME Посмотри статью в нашем факе (ветка J2ME), я уже эту тему затрагивал (IDEA здесь не причём ![]() Вопрос с преверифаером был не так давно в этом форуме задан "Полосатым", я на него отвечал, там он как раз его не использовал, я ему как мог, помог втянуть это дело в Ant-скрипт. |
Автор: mamon4ik 27.10.2006, 11:35 |
Наверное, некорректно вопрос задал. Извиняюсь. то, что jar.exe надо прописывать в PATH узнал из документации к WTK. Прочитав статью в FAQ, понял, что не хватает мне этого - set PATH=%PATH%;%WTK%\bin;%JAVA_HOME%\bin Но я не знаю, как его прописать, и где (в build.xml или где-то еще) ![]() Спасибо. |
Автор: Dancer 27.10.2006, 12:23 |
ну, добавь в скрипт, который у тебя Ant пускает. Ant - это ни что иное, как скприпт (bat-файл) Заходишь в ANT_HOME директорию, открываешь на редактирование ant.bat и добавляешь необходимые строчки (можно практически в самое начало) Ну, или в глобальные виндузовые настройки это дело вносишь. Start->ControlPanel->System(или SystemProperties, ещё это можно получишь правым кликом на значке Мой компьютер, Properties/Свойства) Далее выбираем Advanced->Environment Variables. Меняем PATH для конкретного пользователя или же для всех ну и так далее. Кстати, как и где это всё прописывать кто-то из корефеев уже в факе описывал, но не в J2ME ветке. Отсюда вывод ![]() |
Автор: DissDoc 20.11.2006, 10:54 |
Не знаю, может я и не прав, но у автора в коде есть функция main - которая в J2ME недопустима ![]() |
Автор: Platon 20.11.2006, 10:56 |
![]() ![]() |