Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition

JAVA Micro Edition Низкоуровневое программирование мобильных телефонов.

Ответ
 
Опции темы
Старый 06.11.2008, 21:19   #16
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Ну это я там уже лишнего наворотил в попытках заставить всё это работать. Проблемы так таковые две:
1) У меня commandAction вообще не вызывался, пока я не перенёс его в главный класс мидлета. Вот где тут связь - вообще не представляю.
2) А обрабатывать нажатие клавиш мне надо в основном цикле программы, а не в отдельном методе, поэтому я и получаю нажатые команды в переменную, а после их сравниваю. По мне, так в данном случае это оптимальный вариант.
(Offline)
 
Ответить с цитированием
Старый 07.11.2008, 13:08   #17
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Получение команд в формах

1. Такое чувство, что просто переменную забыли проинициализировать, вот и не вызывается.
2. В яве нет понятия основной цикл программы, как и в Дельфи. Это событийная среда. Ну да дело ваше.
(Offline)
 
Ответить с цитированием
Старый 07.11.2008, 15:04   #18
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Ну вот не могу я въехать в ООП... :'(
(Offline)
 
Ответить с цитированием
Старый 07.11.2008, 17:51   #19
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Получение команд в формах

Сообщение от Phantom_wc Посмотреть сообщение
Ну вот не могу я въехать в ООП... :'(
Если, например, в Pascal можно и без ООП обойтись, то в java без него никак - это основа.
(Offline)
 
Ответить с цитированием
Старый 07.11.2008, 18:37   #20
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Ладно, буду исправляться. =)
- - -
Только вот понять не могу. Ну вот есть классы в программе. Каждый класс представляет свой тип данных, которым можно крутить вертеть при помощи методов, объявленных внутри. Но ведь по-любому сама программа не может выполняться путём цепочки методов, где первый метод вызывает второй, тот вызывает третий и так далее. Должна быть основная часть программы, которая всем этим рулить будет. В интернете сколько читал про ООП, ничего про это не видел. Везде только и пишут, что в ООП классы надо представлять как ящики, о внутренностях которых ничего не известно, но из него торчат проводки (методы), которыми он может взаимодействовать с другими ящиками. То есть получается, что у меня есть куча ящиков, но нет распределительного пульта управления. По мне так это то же самое, если бы я в процедурном языке написал кучу функций, но не имел возможности написать основную часть программы, которая будет вызывать эти функции.
- - -
Растолкуйте плиз.

Последний раз редактировалось Phantom, 07.11.2008 в 19:19.
(Offline)
 
Ответить с цитированием
Старый 10.11.2008, 04:12   #21
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

А ещё такй вопрос. А если создать в программе два класса implements CommandListener, то что будет? Они оба будут на команды одновременно реагировать? Или вообще не скомпилируется такая программа?
(Offline)
 
Ответить с цитированием
Старый 10.11.2008, 05:04   #22
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

2. В яве нет понятия основной цикл программы, как и в Дельфи. Это событийная среда. Ну да дело ваше.
У меня в потоке (как в МП) всё выполняется, там есть цикл условно бесконечный. В нём всякие меню, вывод текста и т. п. Суть программы грубо говоря просто показывать текст и менюшки. Менюшки вложены друг в друга, всё полностью в канвасе обрабатывается. Но кроме того мне надо сделать ввод текста. Было решено сделать как в опере мини. То есть всё реализовано в канвасе, только текст вводится в ТекстБоксе. И всего две команды: "Назад" и "Далее". И команды эти нужно обрабатывать только в ТекстБоксе, в канвасе команды не используются вообще. Я вывел в отдельный метод в отдельном классе код, который переключает в режим отображения ТекстБокса, ожидает набирания текста и нажатия одной из двух команд. После этого происходит переключение обратно в режим канваса и метод возвращает либо null (если была нажата команда "Назад"), либо строку, которую пользователь ввёл в ТекстБокс (если была нажата команда "Далее"). А из того, основного цикла программы я просто потом в нужном месте вызываю этот метод для вывода на экран ТекстБокса, ожидания ввода текста и нажатия команды. А затем обыкновенным условием проверяю, что вернул метод. Если null, значит пользователь нажал "Назад", если не null, значит пользователь нажал "Далее" и вернулась строка. И я не представляю, как мне это передедать так, чтобы в commandAction происходила полная обработка команд. Ведь мне не надо, чтобы в зависимости от того, какая команда была нажата, вызывался тот или иной метод. Веь мне нельзя прервать основной цикл программы. Ну а как тут без цикла - я вообще не представляю даже. Даже если я каждую менюшку вынесу в отдельный метод, то как заставить commandAction вызывать именно ту, которая мне нужна? Писать по две команды ещё и на каждую менюшку? А если менюшек много, придётся воодить много переменных. А если я захочу ещё несколько менюшек добавить? Мне потом ещё придётся добавлять эти переменные в тот класс, который implements CommandListener. Короче, мне кажется, что я всё сделал оптимально. Теперь я могу менять всё собственно в основном цикле программы, и не вспоминать о том, как там у меня работает вывод текстбокса или текста, или менюшек. Просто вызываю нужный метод и всё отрисовывается, выводится и т. п. Разве не это одно из основных правил ООП? У меня есть класс, который универсально работает, мне не нужно каждый раз в нём что-то править, если я захотел ввести мелкие изменения в основном цикле программы. Во как.
(Offline)
 
Ответить с цитированием
Старый 10.11.2008, 13:28   #23
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Получение команд в формах

CommandListener может быть сколько угодно, активным, т.е. тем которому передаются команды, считается тот, который установлен с помощью setCommandListener объекта на экране.

Зачем нужен условнобесконечный цикл если система всё делает сама. Зачем ждать в нём результата ввода в TextBox если мы в обязательно попадём в commandAction? Обрабатываем в нём рекцию и всё! Система сама будет ждать следующую команду или просто клавишу если это Canvas.
Программа завершится только если вызвать
destroyApp(true);
notifyDestroyed();

Напишу пример, чуть позже.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (10.11.2008)
Старый 10.11.2008, 21:49   #24
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Программа завершится только если вызвать
destroyApp(true);
notifyDestroyed();
О я е*у... $#&* Чё правда что ли? Во офигеть... Не, я честно в шоке. Я ЭТОГО НЕ ЗНАЛ! Уахууууууууу!!! Я кажется теперь всё догнал. Во ппц... У меня мозг сломан... Прямо всё в голове перевернулось с ног на голову! Сразу куча идей появилась! Сто пудов: ООП - это круто!
pilgrim, + 1000000!!!
(Offline)
 
Ответить с цитированием
Старый 11.11.2008, 07:32   #25
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Так, а это, какие ещё события есть в J2me? Нажатие/отпускание клавиш в канвасе, нажатие команд в формах, startApp, pauseApp, destroyApp... Что ещё такое полезное есть?
(Offline)
 
Ответить с цитированием
Старый 11.11.2008, 08:27   #26
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Ещё вот что интересное заметил. Ведь если в классе есть метод, который называется также, как и сам класс, то он автоматически вызывается при инициализации (ну или как правильно сказать) класса? Я вот сколько смотрел примеров создания простого приложения про это ничего сказано не было. Везде пишут, что первым вызывается startApp(). А вот фиг. Я проверил экспериментально. Если в классе есть метод с таким же названием, как и сам класс, то при запуске мидлета сначала вызывается он, а потом уже startApp(). У меня такой вопрос: этот метод будет вызываться только при первом запуске приложения или всегда перед startApp()? Если только при первом запуске приложения, то почему нигде не написано, что туда можно вынести код инициализации приложения? Почему пишут, что его надо в startApp() засовывать с проверкой не инициилизирован ли до сей поры ещё мидлет? Хотя с другой стороны, если, например главный класс имеет название a.class, и я в другом классе сделаю экземпляр (или это назвается объект-наследник?) этого класса:
public static a a;
. . .
= new a(); 
, а у меня в классе a.class есть метод "a" и в нём код инициализации приложения, например:
display=Display.getDisplay(this);
// тут другой всякий код, например, определение переменных, присваивание им значений 
, то произойдёт повторная инициализация и мидлет зависнет, запустится заново, вылетит (нужное подчеркнуть). То есть в принципе код инициализации можно засунуть в метод "a", но только при условии, что я не буду создавать в других классах объект с типом "a"? Я правильно рассуждаю? Хочу разобраться во всех мелочах.
(Offline)
 
Ответить с цитированием
Старый 11.11.2008, 13:19   #27
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Получение команд в формах

Сообщение от Phantom_wc Посмотреть сообщение
Если только при первом запуске приложения, то почему нигде не написано, что туда можно вынести код инициализации приложения?
Такой метод называется конструктором класса, и служит как раз для инициализации класса. А вызывается он только при создании экземпляра класса.
Допустим есть класс
public class MyClass{

public 
void MyClass(int count){}//это конструктор класса


Тогда можно написать

public MyClass MC;

MC=new MyClass(10); 
При этом будет вызван конструктор класса с параметром 10.
(Offline)
 
Ответить с цитированием
Старый 11.11.2008, 23:13   #28
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Ну я это и имел ввиду! Но почему же везде пишут, что код инициализации главного класса надо в startApp() засовывать? Примерно так:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class 
extends MIDlet{
// ***********************************
 
private Display d;
// ***********************************
 
public void startApp(){
   if(
d==nulld=Display.getDisplay(this);
 }
// ***********************************
 
public void pauseApp(){ }
// ***********************************
 
public void destroyApp(boolean u){
   
notifyDestroyed();
 }
// ***********************************

То есть d=null только при первом запуске мидлета. Можно, получается, проще. Без условия, просто вынести этот код в a(){ }...
(Offline)
 
Ответить с цитированием
Старый 13.11.2008, 04:52   #29
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Ещё вот не понимаю логики. В мидлет паскалевских классах.
1) Зачем создаётся объект Image размером в экран телефона?
2) Почему потом через этот Image получается Graphics при помощи getGraphics()?
3) Почему метод paint() в классе, который extends Canvas, отрисовывает этот Image на дисплей?
4) И при каких условиях вызывается paint?

Я так понимаю, что в этот Image размером с экран телефона отрисовывается всё, что я рисую на канвасе (текст, изображения, фигуры всякие), а при вызове repaint вызывается paint (где-то я читал, что он иногда может вызваться не сразу после вызова repaint, а когда ему будет хватать процессорных ресурсов, если запущенно много потоков, например), который как раз отрисовывает на экране телефона этот Image, в который мы до этого рисовали.

Поправте, плиз, если я что-то не так говорю =)

То есть я могу даже создать несколько таких картинок, создать для каждой свой Graphics и в каждый по очереди нарисовать что-то? А как потом подсунуть нужный Graphics в paint? Или нельзя держать одновременно несколько Graphics'ов в памяти?

Блин, если всё, что я написал выше, не полная чушь, то я кажется начинаю глобально вникать в тему! =)
(Offline)
 
Ответить с цитированием
Старый 13.11.2008, 05:16   #30
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Получение команд в формах

Я ради теста создал два имэджа размером с экран мобилы, создал два графикса, отрисовал в каждый разные картинки. Вызываю repaint после отрисовки первого и после второго. Второй не отрисовывается, только первый. В paint в качестве параметра передаётся какой-то Графикс. Как система решает какой из них передать?
- - -
Чуть позже:
Ой блин, жёстко ступил. Я в обоих случаях в paint отрисовывал первый Image =) А какой там Графикс - это по ходу вообще не важно, paint ведь сразу на экран телефона рисует, верно? То есть это, как я понимаю, Графикс самого экрана видимо.
Верно?

Последний раз редактировалось Phantom, 13.11.2008 в 05:24.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка и получение сообщения по TCP протоколу Electron19 Основной форум 4 11.07.2009 19:31
Получить значение по индексу snikers BlitzMax 4 22.11.2008 19:24
Получение собственного номера телефона и т.п. ARV Основной форум 11 27.02.2008 08:08
Stats: отсылка и получение Taugeshtu 2D-программирование 3 15.01.2008 21:54


Часовой пояс GMT +4, время: 16:29.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com