Приложение Java ME работает нормально в эмуляторе, но вылетает при развертывании на N70. Любой способ определить причину сбоя? - PullRequest
2 голосов
/ 05 мая 2010

Я разработал приложение Java ME для платформы CLDC. Работает нормально при исполнении в эмуляторе. Но когда я развертываю его на своем телефоне N70, приложение вообще не запускается в телефоне. В моем приложении есть около 14 классов, и я создаю экземпляр каждого из них и помещаю их в вектор при запуске приложения. Классы имеют только одну переменную и 2 метода. Может ли это создание множества экземпляров быть причиной его сбоя?

Есть ли способ узнать причину, по которой приложение не может запуститься в телефоне?

Обновление: На эмуляторе работает нормально. И еще одна вещь, которую я хотел бы упомянуть, это то, что код перестает выполняться только в точке, где я создаю эти 14 экземпляров и добавляю их в вектор. До этого момента код выполняется нормально.

Ответы [ 4 ]

3 голосов
/ 06 мая 2010

Это может зависеть от того, где в коде вы создаете эти экземпляры. Если вы создаете их в своем конструкторе MIDlet или в методе startApp, попробуйте переместить инициализацию в метод run вашего приложения.

Одним из способов отладки приложений J2ME, которые не запускаются на телефоне, является добавление отладочных сообщений в стиле «printf» в код для записи в систему хранилища записей и добавление еще одного мидлета в приложение для чтения из RMS и отображения эти сообщения. Или вы можете просто прокомментировать кусочки кода и посмотреть, работает ли он.

2 голосов
/ 06 мая 2010

Вероятность того, что ваше приложение фактически прервет поток интерпретатора байт-кода виртуальной машины Java и завершит весь собственный процесс, очень мала.

Это уже происходило ранее, но вам нужно устранить некоторые другие потенциальные проблемы, прежде чем убеждатьфактического сбоя.

Более вероятно, что либо:

  • Ваш мидлет не создан или не запущен, потому что среда выполнения MIDP решает, что это неверно.
    или
  • Ваш мидлет просто генерирует исключение, которое вы не перехватываете, что может заставить его выглядеть так, как будто его жестоко прервали.

Поскольку установщик мидлета должен помешать вам установитьплохой мидлет, проблема с необработанным исключением более вероятна.

Как найти необнаруженное исключение:

  • Начните с самого простого мидлета HelloWorld, используя Form, чтобы вы могли легко вставитьбольше StringItem с вверху экрана.
  • Создайте и запустите новый Thread в MIDlet.startApp()
  • В переопределении Thread.run() добавьте блок try{}catch(Throwable){}.
  • Внутри этого блока сделайте все, что делал ваш оригинальный мидлет.
  • Используйте форму в качестве стандартного вывода для отладки.

Вы можете использовать ведение журнала форм, чтобы не вводить бесконечный цикл, отображать классы исключений и сообщения, отмечать логические вехи, отображать значения переменных ...

Это первый шаг к выяснению происходящего.

2 голосов
/ 06 мая 2010

Вы можете отлаживать на устройстве. Если используемый вами эмулятор является частью Nokia SDK, в другом месте должны быть возможности для тестирования и отладки на устройстве. (Я бы опубликовал более подробную информацию об этом, но я только недавно сделал это с телефонами Sony Ericsson.)

Другим вариантом является использование инструментов Nokia , которые позволяют просматривать стандартный вывод и ошибку приложения, когда оно работает на вашем устройстве (например, через Bluetooth).

0 голосов
/ 12 мая 2010

Я также столкнулся с подобной проблемой, и когда я перекомпилировал свой MIDLET в Midlet 1.0, он работал нормально. Похоже, что N70 не может запустить новую версию MIDLET. Я думаю, что вы понижаете рейтинг и перепроверяете свой мидлет.

Привет

Junaid

...