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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Показать splash screen 
V
    Опции темы
gvozd
Дата 29.11.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
Помогите, пожалуйста, решить такую задачу. Мидлет при запуске генерирует на форме список. При клике на элементе списка открывается canvas с содержимым, но так как canvas довольно долго открывается, в связи со считыванием данных, хотелось бы после клика отображать заставку, чтоб не создавалось впечатление зависшего приложения. Пробовал сделать следующим образом:
Код

      Display display = Display.getDisplay(this);
      display.setCurrent(splash);
      splash.repaint();

      readCanvas.reset();
      readCanvas.setTitle(__selectedString);
      loadChapter(getLstMainMenu().getSelectedIndex(), __selectedString);
      display.setCurrent(readCanvas);
      readCanvas.repaint();


Но заставка не отображается, а сразу появляется readCanvas. Подскажите, пожалуйста, как отобразить заставку.
PM MAIL ICQ   Вверх
RomkaRomka
Дата 2.12.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может поможет: отображать заставку прямо из канваса. Добавить в конвас переключатель состояния и в соответствии состояния отрисовывать нужное.

Код

private final int STATE_LOAD = 0;
private final int STATE_WORK = 1;

public void paint(Graphics g)
{
    switch (state) {
        case STATE_LOAD:
            // рисуем заставку
            break;

        case STATE_WORK:
            // рисуем что надо
            break;
    }
}

// если paint вызывается в цикле
public void init()
{
    state = STATE_LOAD;

    // загружаем что надо

    state = STATE_WORK;
}

// если paint не вызывается в цикле
public void init()
{
    state = STATE_LOAD;
    repaint();
    
    // загружаем что надо

    state = STATE_WORK;
    repaint();
}


С уважением, Роман.
PM MAIL   Вверх
eugine_s
Дата 2.12.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



После вот этого:
Код


splash.repaint();



нужно усыпить поток, чтобы дать возможность перерисовать экран.

т.е.
Код

splash.repaint();
try {
Thread.sleep(20);
} catch (Exception e) {}


Добавлено через 10 минут и 36 секунд
RomkaRomka, нет, так не получится. Результат будет аналогичный.

repaint() - это не гарантированная перерисовка экрана. Это только "галочка" для потока перерисовки экрана (*галочка можно читать как -  было бы не плохо перерисовать экран). Но если основной поток занят каким-то "тяжелым" заданием, то поток перерисовки экрана может просто не получить времени для выполнения своего задания. Точнее он получает время для перерисовки экрана, но уже после того как основной поток выполнил задание.

Так же можно попробовать после repaint() вызывать serviceRepaint(). Но все же я рекомендовал бы разобраться с приоритетами потоков.


Это сообщение отредактировал(а) eugine_s - 2.12.2008, 19:13
PM MAIL   Вверх
gvozd
Дата 2.12.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем спасибо, проблема решена. Сделал проще - класс Loader, в который передаются необходимые данные и отрисовывается сплэш, затем в нем через миллисекунду срабатывает таймер, который вызывает чтение данных и их вывод.
PM MAIL ICQ   Вверх
RomkaRomka
Дата 2.12.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Согласен, с repaint() ступил. Есть такая фишка.

С уважением, Роман.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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