2005/10/31(月) [n年前の日記]
#4 [java] ShortTimerとThread
 DoJa3.0で容量が違ってくるらしいので、それぞれの方法で動かすものを書いて実験。
eclipse 上から動か…すと容量がよくわからないのか。DoJa3.0のツールでビルド。最初は Thread のほうが容量が大きかったけど、考えてみれば e.printStackTrace(); とかそのへん最後には消していいのだろうな。ということで該当部分をコメントアウトしたら、わずかに thread のほうが少なくなった。
ちなみにこんな感じのソース。
ShortTimer 版。
Thread 版。
 eclipse 上から動か…すと容量がよくわからないのか。DoJa3.0のツールでビルド。最初は Thread のほうが容量が大きかったけど、考えてみれば e.printStackTrace(); とかそのへん最後には消していいのだろうな。ということで該当部分をコメントアウトしたら、わずかに thread のほうが少なくなった。
| ShortTimer | 1,423 byte | 
| Thread | 1,401 byte | 
ちなみにこんな感じのソース。
ShortTimer 版。
import com.nttdocomo.ui.Canvas;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Graphics;
import com.nttdocomo.ui.IApplication;
import com.nttdocomo.ui.ShortTimer;
public class IappliTestTimerA extends IApplication {
    private ShortTimer tm;
    public void start() {
        MyCanvas mc = new MyCanvas();
        mc.setSoftLabel(MyCanvas.SOFT_KEY_2, "終了");
        Display.setCurrent(mc);
        tm.start();
    }
    class MyCanvas extends Canvas {
        int counter;
        public MyCanvas() {
            counter = 0;
            tm = ShortTimer.getShortTimer(this, 0, 100, true);
        }
        public void processEvent(int w_type, int w_param) {
            if ((w_type == Display.TIMER_EXPIRED_EVENT) && (w_param == 0)) {
                counter++;
                repaint();
            }
            if ((w_type == Display.KEY_PRESSED_EVENT) && (w_param == Display.KEY_SOFT2)) {
                terminate();
            }
        }
        public void paint(Graphics g) {
            g.lock();
            g.clearRect(0, 0, getWidth(), getHeight());
            if ((counter & 0x01) == 0) {
                g.drawString("test", 120, 120);
            }
            g.unlock(true);
        }
    }
}
Thread 版。
import com.nttdocomo.ui.Canvas;
import com.nttdocomo.ui.Display;
import com.nttdocomo.ui.Graphics;
import com.nttdocomo.ui.IApplication;
public class IappliTestTimerB extends IApplication {
    public void start() {
        MyCanvas mc = new MyCanvas();
        mc.setSoftLabel(MyCanvas.SOFT_KEY_2, "終了");
        Display.setCurrent(mc);
    }
    class MyCanvas extends Canvas implements Runnable {
        private Thread tm;
        int counter;
        public MyCanvas() {
            counter = 0;
            tm = new Thread(this);
            tm.start();
        }
        public void run() {
            while (true) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
//                  e.printStackTrace();
//                  break;
                }
                counter++;
                repaint();
            }
        }
        public void processEvent(int w_type, int w_param) {
            if ((w_type == Display.KEY_PRESSED_EVENT) && (w_param == Display.KEY_SOFT2)) {
                terminate();
            }
        }
        public void paint(Graphics g) {
            g.lock();
            g.clearRect(0, 0, getWidth(), getHeight());
            if ((counter & 0x01) == 0) {
                g.drawString("test", 120, 120);
            }
            g.unlock(true);
        }
    }
}
[   ツッコむ ]
以上です。