Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Мобильные платформы > J2ME
Перезагрузить страницу Треды и repaint как рисовать
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
X-Cite_Forever X-Cite_Forever вне форума
Member
 
Сообщений: 536
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.10.2006
По умолчанию Треды и repaint как рисовать - 05.08.2008, 23:50

Вот код:
Код:
protected void paint(Graphics g)
    {
        int Width, Height;
        Width = g.getClipWidth();
        Height = g.getClipHeight();
        g.setColor(64,65,68);
        g.fillRect(0,0,Width,Height);
        g.setColor(0,0,0);
        g.drawString("Ваши деньги: "+scoreclass.Money,60,5,0);
        g.drawString("Соперника деньги: "+scoreclass.Money,60,20,0);
        g.drawString("Ваша ставка: "+scoreclass.Stavka,60,35,0);
        g.drawString("Соперника ставка: "+scoreclass.Stavka,60,50,0);
        g.drawString("Ваши очки: "+score,60,65,0);
        g.drawString("Сопреника очки: "+scorecomp,60,80,0);
        g.drawImage(img,5,5,0);
        int k, t;
        t = 0;
        for (k = 0; k < (Number1-1); k++)
        {
            g.drawImage(im1[k],10+t,170,0);
            t += 15;
        }
        t = 0;
        for (k = 0; k < (Number2-1); k++)
        {
            g.drawImage(im2[k],10+t,120,0);
            t += 15;
        }
    }
 
public void run()
    {
        boolean b = true;
        while (b) 
        {
            im2[Number2-1] = My.setImage("/"+coloda[Number2+Number1-1]+".png");
            scorecomp += getValueCart(coloda[Number2+Number1-1]);
            b = !CheckState(false);
            Number2++;
ВОТ ТУТ НЕ ВЫЗЫВАЕТСЯ    repaint();
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
тред создается в этом же классе в конструкторе, а запускается в commandAction...
Ответить с цитированием
  (#2 (permalink)) Старый
zevun zevun вне форума
Member
 
Сообщений: 551
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.08.2007
По умолчанию 06.08.2008, 18:56

Вызов repaint() работает без проблем, но метод асинхронный, то есть сама прорисовка осуществляется скорее всего в главном треде, а не в том из которого вызвали repaint(). То есть главный тред должен быть свободен от всякого рода длительных вычислений.

К тому же дочерний тред мог просто выйти, то есть переменная условия окончания цикла b стала false и тред вышел, а Вы этого не заметили и удивляетесь почему ничего не перерисовывается. Проверьте.
Ответить с цитированием
  (#3 (permalink)) Старый
X-Cite_Forever X-Cite_Forever вне форума
Member
 
Сообщений: 536
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.10.2006
По умолчанию 06.08.2008, 22:56

Вот момент где вызывается тред..
Вроде бы ничего не загружено..
Код:
public void commandAction(Command c, Displayable d)
    {
        if (c == Yet)
        {
            im1[Number1-1] = My.setImage("/"+coloda[Number1-1]+".png");
            score += getValueCart(coloda[Number1-1]);
            Number1++;
            CheckState(true);
        }
        if (c == OK)
        {
            thread.setPriority(Thread.NORM_PRIORITY);
            thread.run();
        }
        repaint();
    }
А b точно не становится 1-ый раз false; минимум раз 2-5
Ответить с цитированием
  (#4 (permalink)) Старый
zevun zevun вне форума
Member
 
Сообщений: 551
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.08.2007
По умолчанию 06.08.2008, 23:35

Чтобы запустить тред надо вызывать метод start, то есть вместо thread.run() должно быть thread.start().
Ответить с цитированием
  (#5 (permalink)) Старый
X-Cite_Forever X-Cite_Forever вне форума
Member
 
Сообщений: 536
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.10.2006
По умолчанию 07.08.2008, 12:50

Хм.. я сейчас на работе и проверить данную версию смогу только вечером...
Но при вызове run() тред выполняется...
Потому что только в нем есть переход на другой экран (CheckState(false)) который потом и вызывается...
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 07.08.2008, 12:59

При вызове run(), естественно, выполняется run(). Но в контексте вызывающего потока, как обычная функция.
А вот при вызове start() таки запускается новый поток, и уже в его контексте автоматически запускается run()
Ответить с цитированием
  (#7 (permalink)) Старый
X-Cite_Forever X-Cite_Forever вне форума
Member
 
Сообщений: 536
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.10.2006
По умолчанию 08.08.2008, 15:53

Да.. точно... Надо идти в отпуск...
Смотрел в книгу, там написано start() смотрю у меня написано run() значит все впорядке... А вместо run() мне казалось что у меня start()... Бывает.. Надо отдохнуть...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как рисовать на дисках? Woodpecker monitor Софт и программы 2 01.07.2007 15:13
Как рисовать на рабочем столе AfIS Delphi 7 10.12.2006 14:35
OpenGL and Bitmap как рисовать Sleem Программирование графики 0 05.12.2006 00:40
Как в VC++ 6.0 в консольном приложении рисовать Xopc Visual C++ 7 11.04.2006 04:32
Как рисовать пикселы на Image Dругая C++ Builder 9 12.12.2005 04:31
Как научиться рисовать в С++ Red_Warrior Вопросы начинающих программистов 1 01.03.2005 00:02
Как рисовать в Prolog Anonymous Prolog 2 18.11.2004 12:04
Xlib + Qt как рисовать vinco Общие вопросы программирования 6 18.05.2004 16:51
Как рисовать без моргания Anonymous Assembler 2 10.11.2003 08:16
Scroll как в нем рисовать Aist++ WinAPI 5 17.09.2003 12:35
Куда вставить repaint чтоб отображало в IE alt7 Java 8 01.08.2003 14:03
Как рисовать кубики Kutushut ASP 4 20.09.2002 12:01



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов