2010-05-05 2 views
2

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

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

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

+0

Проблема заключалась в том, что я создавал объекты/выделения памяти в методе startMIDLET(). Так что он отлично работал в эмуляторе, но не при развертывании. – MohamedSanaulla

ответ

3

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

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

+0

Я пробовал как с конструктором, так и с методом StartMidlet. Обе места были причиной проблемы. Одна из проблем при вставке в бегущий цикл состоит в том, что если эта часть вызывается снова и снова, это может привести к созданию множества объектов. Я хочу, чтобы их создавали только один раз. – MohamedSanaulla

2

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

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

+0

Я использую Java ME SDK, используя Netbeans для разработки. Спасибо за ссылку инструмента Nokia. будет проходить через него. – MohamedSanaulla

2

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

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

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

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

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

Как найти неперехваченное исключение:

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

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

Это первый шаг чтобы понять, что происходит.

+0

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

+0

Я их всех устал. Я не думаю, что есть какая-либо другая проблема в приложении, пока я не дойду до точки, где я создаю 14 экземпляров и добавляю их к вектору. Тем временем я удалил классы и вместо этого использовал методы в одном классе. – MohamedSanaulla

0

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

Привет

Джунаида

+0

попробует это. На данный момент я как бы удалял множество классов и создание объектов, а вместо этого использовал неправильный способ сделать это с помощью методов :( – MohamedSanaulla