Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Display: get/setCurrent 
:(
    Опции темы
ИванМ
Дата 5.2.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



Интересная ситуация получается. Есть класс MilMid:

Код

public class MilMid extends MIDlet 
{
    private StartCanvas canvas;
    private static MilMid midlet;
    private static Display display;
    public static MainCanvas mainCanvas;
        
    public MilMid()  throws Exception 
    {
        display=Display.getDisplay(this);
        midlet=this;
    }
    
    public static Display getDisplay()
    {
        return display;
    }
    
    protected void startApp()
    {
        try
        {
            canvas=new StartCanvas();
            
        }
        catch(Exception e){}
        getDisplay().setCurrent(canvas);
        if(getDisplay().getCurrent()==canvas)
            System.out.println("!");
    }
}


При запуске на консоль выводится "!" как и должно быть.

Но если в классе StartCanvas пишу следующее:

Код

public void commandAction(Command c,Displayable d)
{
    if(c==cmdStart)
    {
        mainCanvas=new MainCanvas();
        MilMid.mainCanvas=mainCanvas;            
        MilMid.getDisplay().setCurrent(mainCanvas);
        if(MilMid.getDisplay().getCurrent()==mainCanvas)
            System.out.println("!");            
    }
    else if(c==cmdExit)
    {
        quit();
    }
}


То второй восклицательный знак "!"  не выводится. И вообще во всех классах кроме наследованных от Midlet, при таком коде:

Код

MilMid.getDisplay().setCurrent(*);
if(MilMid.getDisplay().getCurrent()=*)
    System.out.println("!");
    

Получается ерунда.
Почему так?
PM MAIL   Вверх
math64
Дата 6.2.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



А новая Canvas выодится? Если да, то выполнение setCurrent() немного откладывается (за исключением startApp() - и это не от того, в каком классе произвдится setCurrent()). Это поведение эмулятора, как я понимаю, а на реальном устройстве?
PM   Вверх
eugine_s
Дата 6.2.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



А в этот код выполняется вообще? 

Цитата(ИванМ @  5.2.2009,  22:18 Найти цитируемый пост)
Код

if(c==cmdStart)
    {
        mainCanvas=new MainCanvas();
        MilMid.mainCanvas=mainCanvas;            
        MilMid.getDisplay().setCurrent(mainCanvas);
        if(MilMid.getDisplay().getCurrent()==mainCanvas)
            System.out.println("!");            
    }


Я бы сказал что ты не установил на своем Canvas-e commandListener

Проверь как-нибудь вот так:

Код


if (c ==cmdStart)
{
System.out.println("ok");
}

PM MAIL   Вверх
dive
Дата 6.2.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 25.10.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 5



PM MAIL WWW Skype GTalk Jabber MSN   Вверх
ИванМ
Дата 6.2.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: нет
Всего: 23



math64, новая канвас выводится но не всегда. Если я например перехожу из одной канвас в другую через setCurrent, а потом автоматически из нее еще на одну, то не работает.
Пришлось в общем отказаться от этой функции. Делаю все через одну канвас.
eugine_s , код выполняется. CommandListener установлен.
dive , простите, что вы имели ввиду этой ссылкой?
PM MAIL   Вверх
math64
Дата 7.2.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



В данном случае применеие == законно, и ссылка приведённая dive здесь ни при чём.
Скорее всего, setСurrent() работает не сразу, а ставится в очередь. Второй setCurrent() можно делать когда первый выполнится (может, запустить по таймеру).
Ещё один эффект: canvas с setFullScreen(true) переходим к List, от List возвращаемся к Canvas, приходится заново делать setFullScreen(true) по крайней мере на эмуляторе.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1232 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.