Приложение Java ME работает нормально в эмуляторе, но аварийно завершает работу при развертывании на N70. Любой способ определить причину сбоя?
Я разработал приложение Java ME для платформы CLDC. Работает нормально при исполнении в эмуляторе. Но когда я развертываю его на своем телефоне N70, приложение вообще не запускается в телефоне. В моем приложении есть около 14 классов, и я создаю экземпляр каждого и помещаю их в вектор при запуске приложения. Классы имеют только одну переменную и 2 метода. Может ли это создание множества экземпляров быть причиной его сбоя?
Есть ли способ узнать причину, по которой приложение не запускается в телефоне?
Обновление: нормально работает на эмуляторе. И еще одна вещь, которую я хотел бы упомянуть: код перестает выполняться только в точке, где я создаю эти 14 экземпляров и добавляю их в вектор. До этого момента код выполняется нормально.
4 ответа
Это может зависеть от того, где в коде вы создаете эти экземпляры. Если вы создаете их в своем конструкторе MIDlet или в методе startApp, попробуйте переместить инициализацию в метод run вашего приложения.
Одним из способов отладки приложений J2ME, которые не запускаются на телефоне, является добавление отладочных сообщений в стиле "printf" в ваш код для записи в систему хранилища записей и добавление еще одного мидлета в приложение для чтения из RMS и отображения этих сообщений. Или вы можете просто прокомментировать кусочки кода и посмотреть, работает ли он.
Вероятность того, что ваше приложение фактически прервет поток интерпретатора байт-кода виртуальной машины Java и завершит весь собственный процесс, очень мала.
Это уже случалось, но вам нужно устранить некоторые другие потенциальные проблемы, прежде чем быть уверенным в фактическом сбое.
Более вероятно, что либо:
- Ваш MID-лет не создан или не запущен, потому что среда выполнения MIDP решает, что это не правильно.
или же - Ваш мидлет просто генерирует исключение, которое вы не перехватываете, что может заставить его выглядеть так, как будто его жестоко прервали.
Поскольку предполагается, что установщик мидлета не позволяет установить плохой мидлет, проблема с неперехваченным исключением является более вероятной.
Как найти неисследованное исключение:
- Начните с самого простого мидлета HelloWorld, используя
Form
так что вы можете легко вставить большеStringItem
s в верхней части экрана. - Создать и начать новый
Thread
вMIDlet.startApp()
- В вашем переопределении
Thread.run()
, добавитьtry{}catch(Throwable){}
блок. - Внутри этого блока делайте то, что делал ваш оригинальный мидлет.
- Используйте форму в качестве стандартного вывода для отладки.
Вы можете использовать ведение журнала форм, чтобы не вводить бесконечный цикл, отображать классы исключений и сообщения, отмечать логические этапы, отображать значения переменных...
Это первый шаг к пониманию того, что происходит.
Вы можете отлаживать на устройстве. Если используемый вами эмулятор является частью Nokia SDK, в другом месте должны быть возможности для тестирования и отладки на устройстве. (Я бы опубликовал более подробно об этом, но я только сделал это с телефонами Sony Ericsson в последнее время.)
Другим вариантом является использование инструментов Nokia, которые позволяют просматривать стандартные выходные данные и ошибки для вашего приложения, когда оно работает на вашем устройстве (например, через Bluetooth).
Я также столкнулся с подобной проблемой, и когда я перекомпилировал свой MIDLET в Midlet 1.0, он работал нормально. Кажется, что N70 не может запустить новую версию MIDLET. Я думаю, что вы понижаете рейтинг и перепроверяете свой мидлет.
С уважением
Junaid