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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самодельный Gauge, При коннекте 
:(
    Опции темы
VKoresh
Дата 28.11.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ув. программисты! Столкнулся с такой проблемой - при коннекте необходимо показывать какой-нибудь индикатор, который бы мигал "Connecting..." или выводил бы что-то вроде этого на экран. Поэтому написал свой класс, который наследовал от канваса(дабы отрисовать можно было что угодно). НО! Оказывается, что когда приложение начинает искать соединение, он, зараза, отрисовывает один раз и все.
Вот сам класс
Код

public class MGauge extends GameCanvas implements Runnable
    {
        private String label="";
        public boolean done = false;        
        MGauge(boolean suppress,String title)
        {
            super(suppress);
            label = title;            
            start();
        }

        public void start()
        {
            Thread t = new Thread(this);
            t.start();
        }

        public synchronized void run()
        {
            while (!done)
            {
                try
                {                    
                    wait(1);
                    repaint();
                    paint();
                }
                catch (Throwable t)
                {
                    t.printStackTrace();                    
                }
            }
        }

        public void paint()
        {
            //System.out.print("123");
            Graphics g = getGraphics();
            g.setColor(0, 0, 0);
            g.fillRect(0, 0, getWidth(), getHeight());
            
            // вот здесь я по разному шутил, например ставил цикл в котором цвет текста меняеться и т.д.
                        for(int i=0;i<127;i++)
                        {
                  g.setColor(255-i,127+i, 0);
                  g.drawString(label, getWidth()/2-label.length()*2-16, getHeight()/2-8, Graphics.LEFT | Graphics.TOP);                
            }
            flushGraphics();        
        }
    }


А вот кусок кода в котором он вызываеться - 
Код


try
{
    mgauge = new MGauge(false,"Connecting...");
    mgauge.addCommand(disconnect);
    mdisplay.setCurrent(mgauge);
    mgauge.setCommandListener(this);                    

    sc = (SocketConnection)Connector.open("socket://" + (TFIP.getString()) + ":" + (TFPort.getString()));
    os = sc.openDataOutputStream();
    is = sc.openDataInputStream();                
}
catch (Throwable x)
{                
    x.printStackTrace();                
}


В коде вы наверное обратили внимание на //System.out.print("123");, так вот уже ПОСЛЕ того как прошел коннект он выдал целую строку,состоящую из 123.

Ломаю голову уже второй день, вот решил отписаться smile 
Почему так происходит? И как можно с этим бороться?
Может кто-то уже сталкивался с подобной проблемой?
Буду безмерно признателен за любую информацию и примеры.

PM MAIL ICQ   Вверх
Antropoid
Дата 28.11.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Есть подозрение, что это замуты WTK. На другом эмуле ОК?


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
VKoresh
Дата 28.11.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тестировал только на ВТКшном емуляторе. к сожалению протестить на телефоне тоже возможности нет :(
Пробовал вместо GameCanvas использовать Canvas. Та же малина :(
PM MAIL ICQ   Вверх
Antropoid
Дата 28.11.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Так вот попробуй на Carbide.j


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
VKoresh
Дата 28.11.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



*Охх, чувствую щас как задам нубовский вопрос!*
Это с чем едят?

ЗЫ камнями не кидайте smile 

Это сообщение отредактировал(а) VKoresh - 28.11.2007, 12:12
PM MAIL ICQ   Вверх
eugine_s
Дата 28.11.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



VKoresh, попробуй закоментировать строки связанные с Socket-ами 

Код

    sc = (SocketConnection)Connector.open("socket://" + (TFIP.getString()) + ":" + (TFPort.getString()));
    os = sc.openDataOutputStream();
    is = sc.openDataInputStream(); 


Будет ли у тебя в этом случае работать так как нужно.

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

Код

             try
                {                    
                    wait(1);
                    repaint();
                    paint();
                }


я так понимаю что repaint() забыл закоментировать?

P.S. ИМХО, лучше работать с одним канвасом (или gamecanvas-ом)

Добавлено через 3 минуты и 52 секунды
Цитата(VKoresh @  28.11.2007,  12:11 Найти цитируемый пост)
Это с чем едят?


Это про carbige.j ? 

Сам не разу не пользовался smile , знаю что это от нокии, предполагаю что это набор эмуляторов.
http://forum.nokia.com в разделе Tools and SDKs
PM MAIL   Вверх
Antropoid
Дата 28.11.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

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



Цитата(VKoresh @  28.11.2007,  12:11 Найти цитируемый пост)
Это с чем едят?


Цитата(eugine_s @  28.11.2007,  12:24 Найти цитируемый пост)
Это про carbige.j ? Сам не разу не пользовался  , знаю что это от нокии, предполагаю что это набор эмуляторов.http://forum.nokia.com в разделе Tools and SDKs


угу.


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Dancer
Дата 28.11.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я конечно всё понимаю, что многое хочется сделать самому, но вот нахрена вот такой метод вводить?
        public void paint()

по мне,  должно быть вот так....
        public void paint(Graphics g)




--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
VKoresh
Дата 28.11.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем спасибо!
Проблему решил!

Вот так он выглядит сейчас - 
Код

public class MGauge extends GameCanvas implements Runnable
    {
        private String label = "";
        public boolean done = false;
        private int k = 5;
        
        MGauge(boolean suppress, String title)
        {
            super(suppress);
            label = title;
            start();
        }

        public void start()
        {
            Thread t = new Thread(this);
            t.start();

        }

        public synchronized void run()
        {
            while (!done)
            {
                try
                {
                    if (k == 25) k = 5;
                    k = k + 1;
                    repaint();
                    wait(1);
                    paint();

                }
                catch (Throwable t)
                {
                    t.printStackTrace();
                    System.out.println("MGauge run");
                }
            }
        }

        public void paint()
        {            
            Graphics g = getGraphics();
            g.setColor(0, 0, 0);
            g.fillRect(0, 0, getWidth(), getHeight());

            g.setColor(k*10,k*5,0);
            g.drawString(label, getWidth() / 2 - label.length() * 2 - 16, getHeight() / 2 - 8, Graphics.LEFT | Graphics.TOP);
        }
    }


Но это чисто на тот случай если кто-то захочет использовать  smile 
А вся соль была в том, что я после 
Код

 sc = (SocketConnection)Connector.open("socket://" + (TFIP.getString()) + ":" + (TFPort.getString()));
    os = sc.openDataOutputStream();
    is = sc.openDataInputStream();

ставил проверку не равны ли они null и если не равны, то был следующий кусок кода
Код

                        if (mgauge != null)
            {
                mgauge.done = true;
                mgauge = null;
            }

а потом создавался еще один некий класс которому передавал управление, что привело к тому что gauge уже умер а новый класс еще не успел создаться.
PM MAIL ICQ   Вверх
eugine_s
Дата 28.11.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



VKoresh, все же зачем вот такое вот?

Код

                    repaint();
                    wait(1);
                    paint();

Бред какой-то. 

Цитата(VKoresh @  28.11.2007,  14:00 Найти цитируемый пост)
А вся соль была в том, что я после 


в следующий раз приводи полный код.

Dancer, как разница как назвать метод. пусть вместо paint() будет draw(), только главное правильно все сделать, а не делать каждый раз перед отрисовкой:

Graphics g = getGraphics();  - этого достаточно один раз сделать где-нибудь в конструкторе.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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