Форум программистов, компьютерный форум CyberForum.ru

Java ME (J2ME)

Войти
Регистрация
Восстановить пароль
 
ВитаминКО
11 / 11 / 1
Регистрация: 17.08.2012
Сообщений: 95
#1

Java ME (Embedded) | Запуск мидлетов в CVM - Java ME

24.11.2015, 06:15. Просмотров 758. Ответов 9

В общем, решил повозиться с запуском мидлетов на родной JVM, а не через эмуляторы. Все это происходит на системе Maemo 5. Процессор ARM, собственно, и JVM у меня Embedded.

Написал bash для запуска, поправил как смог появляющиеся ошибки:
а) распаковал сам мидлет, чтобы CVM нашла главный класс
б) так же распаковал библиотеки профилей CLDC и MIDP из Java ME SDK, т.к. через ключи -ср и -Djava.library.path не получилось

Теперь в консоли пишет следующее:
Bash
1
2
3
4
java.lang.NoSuchMethodException: main
      at java.lang.Class.getmethod0 (Native Method)
      at java.lang.Class.getmethod (Unknown Source)
      at sun.misc.CVM.runMain (Unknown Source)
Кто разбирается в работе JVM - объясните пожалуйста, с чем связана такая ошибка и как ее можно исправить?
И по пункту (б) - можно ли все-таки подключать те библиотеки через ключи или так и оставить?

И как можно сконфигурировать CVM так, чтобы не приходилось распаковывать? На смартфонах с Symbian под каждый мидлет создавалась папка, туда копировался мидлет (т.е. устанавливался) и заводилась папка под записи RMS. Хочется чего-то подобного.

Версия CVM:
Bash
1
2
3
4
Product version "Oracle Java Micro Edition Embedded Client 1.1.1"
*Java(TM) ME CDC 1.1.2 Runtime Environment (build 1.1.1-b02)*
Components: CDC JSR218, FP JSR219, JAAS JSR219, JCE JSR219, JSSE JSR219, RMI JSR66, JDBC JSR169, XML JSR280
JVM: CVM (mixed mode)
А то, может, дело в самой версии CVM и мне надо вовсе другую запускать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ВитаминКО
11 / 11 / 1
Регистрация: 17.08.2012
Сообщений: 95
25.11.2015, 17:15  [ТС]     Java ME (Embedded) | Запуск мидлетов в CVM #2
Интересует любая информация
Tavashi
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 10
21.05.2016, 14:56     Java ME (Embedded) | Запуск мидлетов в CVM #3
Что вы имеете ввиду под "запуском мидлетов на родной JVM"?
ВитаминКО
11 / 11 / 1
Регистрация: 17.08.2012
Сообщений: 95
22.05.2016, 16:23  [ТС]     Java ME (Embedded) | Запуск мидлетов в CVM #4
Tavashi, такой же запуск, как в обычных мобильных телефонах. К примеру - Nokia 7500.
На оригинальной вряд ли получится, т.к. вроде эти JVM лицензируются для разработчиков. Но есть свободная CVM от Oracle для Embedded устройств, которую я и использовал.

По теме: та ошибка, скорее всего, из-за отсутствия реализации классов, скорее всего оберток. Ибо не получилось запустить что-то даже с классами из комплекта SDK (разные jsr). Т.е., мидлет просто не получается загрузить.

Но есть модификация от сторонних разработчиков - PhoneME. Там, если я правильно понимаю, реализацию классов написали. В общем плане, большинство приложений работает. Но там встречаются другие проблемы, особенно с играми - ресурсы не загружаются и т.д.. Поэтому я хотел на "оригинальной" JVM запустить с либами из SDK.
Tavashi
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 10
23.05.2016, 10:46     Java ME (Embedded) | Запуск мидлетов в CVM #5
ВитаминКО, если позволите, то давайте попробуем побрэйнстормить
оффтоп?

не через эмуляторы
Эмуляторы реализуют какие-то классы и зависимости, а уж потом идет вызов класса-мидлета. На сколько я понимаю, совсем уж без эмуляторов не удастся запустить.

а) распаковал сам мидлет, чтобы CVM нашла главный класс
Нашла главный класс где? В мидлете? Мидлет класс наследник и/или реализатор, но никак не main.

Итого: как мне это видится, то нельзя просто так запустить мидлет, даже с распакованными либами. Нужно понять, что делает эмулятор при запуске, т.е. какие классы или зависимости реализует. А потом при запуске на родной jvm сделать это самому вручную, только вот разницы с эмулятором не будет, разве что будет свой "как бы эмулятор".
ВитаминКО
11 / 11 / 1
Регистрация: 17.08.2012
Сообщений: 95
23.05.2016, 21:49  [ТС]     Java ME (Embedded) | Запуск мидлетов в CVM #6
Tavashi, в общем, я хотел запускать мидлеты на этой cvm так же, как десктопные приложения запускаются на jvm.
Цитата Сообщение от Tavashi Посмотреть сообщение
совсем уж без эмуляторов не удастся запустить.
Не удастся, если я попытаюсь сделать это на Java SE VM. Это очевидно. Но есть Java ME VM, которая используется в мобильниках. И которую я развернул на Maemo. Один товарищ хотел так же развернуть на Raspberry Pi.

Для Maemo и прочих систем, где нет по-умолчанию поддержки мидлетов (j2me), написали свою реализацию (форк от оракловской) и обозвали это phoneME. Сайт разработчика: http://davy.preuveneers.be/phoneme/?q=node/34

В общем, от первоначальной идеи отказался, слишком хлопотно и времязатратно. Думаю, проще будет доделать костыли к phoneME, чтобы не только приложения, но и игры можно было запускать без проблем (не получается загрузить какой-то ресурс, вроде мелодии или спрайта). Скорее всего, закинуть недостающие API и повозиться с ключами запуска.

Пока что просто, с помощью стороннего GUI "устанавливаю" мидлеты. Буду пробовать делать это по инструкции с офсайта.
Tavashi
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 10
24.05.2016, 00:01     Java ME (Embedded) | Запуск мидлетов в CVM #7
ВитаминКО,
Я вот только не понял для чего нужно было распаковывать мидлет и какой главный класс там должна была найти cvm ... ну да ладно. Раз уж мы говорим о мидлетах, вы не посмотрите мой вопрос в теме? Застрял на этом этапе, нагуглить что-то путного пока что не удалось.
ВитаминКО
11 / 11 / 1
Регистрация: 17.08.2012
Сообщений: 95
24.05.2016, 00:42  [ТС]     Java ME (Embedded) | Запуск мидлетов в CVM #8
Tavashi, там просто не получалось, как на ПК, прописать java -jar filename.jar
cvm не находила главный класс мидлета. cvm - это как java.exe, бинарник виртуальной машины (расширения нет, т.к. Maemo линуксовая ОС).
Tavashi
0 / 0 / 0
Регистрация: 21.05.2016
Сообщений: 10
25.05.2016, 00:15     Java ME (Embedded) | Запуск мидлетов в CVM #9
ВитаминКО,
Наверное я понимаю как-то иначе, но что вы имеете ввиду под главным классом мидлета? В консоли ошибка на отсутствие метода main, который вызывается сам как часть реализации MIDP-профайла. А мидлет это приложение, которое использует MIDP-профайл. Ну т.е. main - он сам по себе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2016, 00:29     Java ME (Embedded) | Запуск мидлетов в CVM
Еще ссылки по теме:
Запуск Java процесса Java SE
Запуск Java приложений Java
JAVA IDE Установка и запуск Java
Java запуск java приложения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ВитаминКО
11 / 11 / 1
Регистрация: 17.08.2012
Сообщений: 95
25.05.2016, 00:29  [ТС]     Java ME (Embedded) | Запуск мидлетов в CVM #10
Tavashi, то, что MIDP составляющую не может найти, я позже понял и написал тут: Java ME (Embedded) | Запуск мидлетов в CVM
Раньше я малость затупил и не обратил внимания, что в этой версии нет MIDP и CLDC. Собственно, существующие реализации прописаны:
Код
Components: CDC JSR218, FP JSR219, JAAS JSR219, JCE JSR219, JSSE JSR219, RMI JSR66, JDBC JSR169, XML JSR280
А главный класс мидлета - это тот, с которого начинается выполнение мидлета
Yandex
Объявления
25.05.2016, 00:29     Java ME (Embedded) | Запуск мидлетов в CVM
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru