Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы компиляции, чего не хватает? 
:(
    Опции темы
Vovan_Danielyan
  Дата 26.3.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 4.8.2007
Где: Усть-Лабинск

Репутация: 1
Всего: 1



Я тут решил собрать приложения для мобильника, не используя никаких IDE, чтобы получше познакомиться с процессом, и наткнулся на одну проблему.
Сперва взял IDE (Sun ONE Studio 4, древняя вещь) создал стандартный MIDletSuite со стандартным мидлетом HelloMIDlet. Собрал, закинул на мобильник - работает.
Потом достал исходники этого HelloMIDlet, скомпилировал (все делал в другой директории), скопировал из архива, созданного IDE, файл манифеста. Cархивировал все в ZIP (соблюдая иерархию каталогов), поменял расширение на jar. Кинул на мобильник - но на этот раз мобильник написал "ошибка приложения".
Пока пыталься понять в чем дело, заметил, что при одинаковых исходных файлах, размер скомпилированного с помощью IDE класса - 1768 байт, а у меня, после компиляции того же файла, класс весил 1401 Байт.
Компилировал я следующей строкой:
Код

C:\Java\balanceProject>javac -d bin   -classpath c:\WTK22\lib\midpapi10.jar   src\balance\sunBalance.java


Такую же библиотеку (c:\WTK22\lib\midpapi10.jar) я подключал к проекту в IDE, так что все, по идее, должно бы работать. Наверняка IDE еще что-то добавляет в командную строку для компиляции  (почему-то же различается размер файлов!), но посмотреть я этого не могу. Может, кто знает как надо правильно   скомпилировать файл, чтобы приложение в конце концов заработало? Или вообще, в чем тут дело, почему размеры-то разные получились?
PM MAIL   Вверх
eugine_s
Дата 27.3.2010, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Для j2me нужно еще делать преверификацию, использую утилиту(ы) из c:\wtk22\bin\preverifyXX
PM MAIL   Вверх
Vovan_Danielyan
Дата 27.3.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 4.8.2007
Где: Усть-Лабинск

Репутация: 1
Всего: 1



Спасибо, этого-то я и не знал. Теперь все заработало. 
Только, я пока preverify выполнял, у меня еще вопрос возник. На команду preverify с указанием в classpath только c:\WTK22\lib\midpapi10.jar выдается ошибка 

Код

Error preverifying class javax.microedition.midlet.MIDlet java/lang/NoClassDefFoundError: java/lang/Object


я добавил в аргумент -classpath еще и c:\j2sdk1.4.2_08\lib\ - думал, раз javac обходится без явного указания пути к стандартным библиотекам, то он их по переменной среды находит - однако c preverify это не помогло. Тогда я заглянул в библиотеку cldcapi10.jar из WTK, обнаружил, что есть требуемый класс, указал его в -classpath и все сработало как надо. Переменная среды у меня выглядит так

Код

CLASSPATH =C:\j2sdk1.4.2_08\lib;.;C:\WTK22\lib


но по этим адресам никаких стандартных библиотек я не нашел (кроме wtk - но ее я сам потом добавил, все и без нее работало). Откуда берет классы javac и почему preverify (и я тоже) их не видит? И одинаковы ли классы Object в cldacapi и в стандартной библиотеке?

Это сообщение отредактировал(а) Vovan_Danielyan - 27.3.2010, 16:09
PM MAIL   Вверх
W0LF
Дата 31.3.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



нужно сначала задать JAVA_HOME, WTK_HOME, а потом добавить в CLASSPATH: %JAVA_HOME%/bin, %WTK_HOME%/bin(вроде так, уже если честно не помню, можно в гугле порыть )
и еще я бы посоветовал собирать проект из-под IDE, ну а если IDE совсем уж не нравится есть такая вещь

Это сообщение отредактировал(а) W0LF - 31.3.2010, 18:44


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Окунь
Дата 31.3.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 8.2.2007
Где: Москва

Репутация: 2
Всего: 2



Как я сам это понимаю:

Чтобы обработать исходники, javac необходима информация обо всех классах, упоминаемых в них. Для этого и нужен параметр CLASSPATH, который указывает, где искать эту информацию. Но еще до CLASSPATH, он ее ищет среди bootstrap-классов и extension-классов. Бутстрап-классы - это и есть java-платформа. Информация о них хранится в файле rt.jar. Там находится, например, пакет java.lang*.
Т.к. мы компилируем для платформы JME, то правильнее было бы в вызове javac добавить опцию "-bootclasspath wtk_home/lib/cldc10.jar".

Преверифай же ищет инфу о классах только в classpath. Поэтому требуется явное указание бутстрап-классов.
PM MAIL   Вверх
ivanovpv
Дата 1.4.2010, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 10
Всего: 28



Правильная постановка вопроса от камрада Vovan_Danielyan. А то действительно развелось много кодеров неспособных с командной строки собрать простенький HelloWorld. IDE конечно хорошо, но уметь поработать честным shell'ом тоже надо уметь и не столько ради самого умения, а столько чтобы понимать как устроено нутро.


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.