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);
}
}
}
[ ツッコむ ]
以上です。