| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Не вызывается repaint() |
| Автор: danilsl 25.10.2008, 20:21 | ||
| Всем доброго времени суток. Вот код:
Результат работы checkMove полностью зависит от того отработает ли метод repaint(). Так вот, у меня чуть моск не закипел, пока я не обнаружил, что в цикле while repaint не отрабатывает! Он просто пропускается! В итоге у меня зависший мидлет. Объясните пожалуйста мне новичку почему это происходит |
| Автор: eugine_s 25.10.2008, 21:37 | ||
Все правильно keyPressed вызывается системным потоком и всякие долгие операции в нем не должны выполняться. Поэтому, чтобы я посоветовал: 1) в keyPressed только запоминать нажатую кнопку и все. void keyPressed(int keyCode) { keyPressed = keyCode; } и все. А обрабатывать эту кнопку уже в другом потоке. Может что-нибудь в вот таком стиле:
2) repaint() - это только флаг "JVM, когда у тебя будет возможность перерисуй канвас". repaint - это не прямой вызов paint(Graphics g); Наверное ты это знаешь, так как используешь serviceRepaint(); 3) я бы советовал еще не привязывать модель и отрисовку (т.е. у тебя модель ничего не будет делать пока не будет произведена отрисовка). Точнее можно так делать, но таким образом как у тебя реализовано... так не покатит. |
| Автор: danilsl 26.10.2008, 00:23 |
| 2,3)В общемто уже сам допёр. А serviceRepaints() после часа мучений нашёл в javadoc и воткнул. Вообще хотел сделать, чтобы отрисовывался не весь экран, а только изменяемая часть. А потом свернул мидлет на телефоне... В общем теперь пошёл стандартным путём. Только вот тормозит теперь заметнее. Короче модель из paint() убрал польностью, в итоге отпала необходимость в serviceRepaints(). Правда без него и работает пошустрей. Только местами прям явно видно, что фрейм-другой жилит. |