LWUIT - исключение нехватки памяти в JavaME - PullRequest
1 голос
/ 17 октября 2011

Я занимаюсь разработкой приложения на Java ME с использованием среды IDE Netbeans, где я создаю 3 формы, которые содержат Button, Command (ОК и обратно) и Image в 1-м Form.

Используя OK Command Я могу перевести элемент управления во 2-ую форму. Это работает

Во 2 Form у меня 2 Command ОК и Назад. При нажатии кнопки ОК она должна перейти к 3-му Form. При нажатии назад он должен вернуться к 1-му Form.

Когда я нахожусь во втором Form, я не могу ни перейти ни в третий, ни в первый Form.

Я получаю следующее исключение .............

java.lang.OutOfMemoryError

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

Пожалуйста, помогите мне. Заранее спасибо

Ответы [ 4 ]

1 голос
/ 19 октября 2011

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

Просто используйте отладчик и просмотрите код, чтобы увидеть рекурсию.

0 голосов
/ 17 октября 2011

Когда вы переключаетесь на 2-й или 3-й проход объекта этого класса и экранного объекта (который от mdilet) с помощью следующего конструктора формы, и когда вы вызываете кнопку возврата, просто напишите одну строку кода, например display.setCurrent(previous_form_object);, и вы знаете, как перейти к следующей форме, нажав кнопку ОК. И одна вещь, о которой упоминает Санджай.

Спасибо

0 голосов
/ 18 октября 2011

Вы можете расширить память эмулятора.Вы должны нажать на Свойства проекта / Платформа / Управление эмуляторами / Инструменты и расширения / Открыть настройки / Хранилище. В этом окне вы увидите размер кучи, напишите здесь 1000 fe и попробуйте снова.

0 голосов
/ 17 октября 2011

С информацией, которую вы предоставили, возможная проблема с изображением в первой форме, вам необходимо отслеживать размер изображения, которое вы используете. Когда изображение загружается, данные распаковываются в массив пикселей. Пикселям может потребоваться от 2 до 4 байтов каждый, в зависимости от устройства. Скажем, изображение размером 800x600 имеет 480 000 пикселей, поэтому для его загрузки потребуется как минимум 1 МБ кучи (возможно, до 2 МБ). Это объяснит, почему у вас заканчивается память. Во время перехода это может быть LWUIT делает локальную копию изображения, чтобы «преобразовать» (перерисовать) его (хотя я не уверен), поэтому неудивительно, если вам нужно больше памяти во время перехода.

Вот хорошее прочтение, которое может вам помочь: Утечки памяти в LWUIT и отслеживание памяти в Java ME

...