Рабочий поток не может обновить пользовательский интерфейс на Motorola V3 - PullRequest
2 голосов
/ 25 января 2011

Я работаю над приложением J2ME, которое должно быть перенесено на телефоны разных производителей.Пока что приложение работает нормально, за исключением Motorola V3 (это единственный телефон Motorola, который я пробовал).

Проблема в том, что когда я запускаю новый поток и когда поток пытается обновитьграфика (вызывая repaint ()), графическая система является стеком.

Немного полезной информации: - Я получаю отображение в конструкторе Midlet и повторно использую его во время жизни приложения.- Есть только один класс, расширяющий Canvas.Каждый рисунок происходит здесь.Когда я хочу перерисовать графику, я вызываю метод repaint (), либо из потока пользовательского интерфейса, либо из другого рабочего потока.Насколько я знаю, каждый поток может получить доступ к интерфейсу без проблем.- Я попытался исправить, где в начале приложения я беру имя запущенного потока (UI) и сохраняю его для дальнейшего использования.Перед вызовом repaint () я проверяю, совпадает ли имя текущего потока с именем потока пользовательского интерфейса.Если это од, то я делаю repaint(), иначе я делаю:

display.callSerially(new Runnable() {
    public void run() {
        repaint();
    }
});

Можете ли вы указать мне какие-либо особенности реализации Motorola J2ME?Как я могу решить эту проблему с обновлениями пользовательского интерфейса потоков?

Спасибо, Златко

1 Ответ

3 голосов
/ 25 января 2011

В отличие от Swing, API пользовательского интерфейса MIDP являются поточно-ориентированными.Это означает, что вам не нужно использовать callSerially, чтобы заставить вещи выполняться в потоке пользовательского интерфейса.Есть сообщения о том, что callSerially не работает на некоторых устройствах Motorola, поэтому лучше всего просто перезвонить.

Обратите внимание, что перекраска - это всего лишь предложение системе перекрасить.Если вы хотите, чтобы перерисовки происходили немедленно, вы должны вызвать метод serviceRepaints.

Хорошее обсуждение обработки событий пользовательского интерфейса MIDP можно найти здесь .

...