Canvas的派生类作为MIDlet内部类初始化时为何不能调用构件器?

popy007 2006-01-13 04:42:45
各位高手,问题是这样的:

我的一个J2ME程序:

public class Foobar extends MIDlet {

private class MyCanvas1 extends Canvas
implements Runnable{

public void MyCanvas1() {

System.out.println("MyCanvas()");
}
//... Canvas必要方法的覆盖
}
public void startApp() throws MIDletStateChangeException {
System.out.println("Before constructing MyCanvas()");
MyCanvas1 myCanvas = new MyCanvas1();
System.out.println("After constructing MyCanvas()");
Thread thread = new Thread(myCanvas);
thread.start();
Display.getDisplay(this).setCurrent(myCanvas);

}
// ... MIDle必要方法的覆盖
}

我把Canvas做为了一个内部类的基类对待。当我执行该程序时,发现输出的debug结果如下:

Before constructing MyCanvas()
After constructing MyCanvas()

中间没有打印出MyCanvas(),所以得到结论:MyCanvas1 myCanvas = new MyCanvas1();
没有得到正常的执行。

而后我把Canvas做为外部友好类的基类提了出来:


class MyCanvas1 extends Canvas
implements Runnable{

public void MyCanvas1() {

System.out.println("MyCanvas()");
}
//... Canvas必要方法的覆盖
}


public class Foobar extends MIDlet {

public void startApp() throws MIDletStateChangeException {

System.out.println("Before constructing MyCanvas()");
MyCanvas1 myCanvas = new MyCanvas1();
System.out.println("After constructing MyCanvas()");
Thread thread = new Thread(myCanvas);
thread.start();
Display.getDisplay(this).setCurrent(myCanvas);

}
// ... MIDle必要方法的覆盖
}

再次执行程序,得到结果:

Before constructing MyCanvas()
MyCanvas()
After constructing MyCanvas()

达到了预期的目的。

请问高手,为什么第一种方案MyCanvas()没有得到运行,和作为内部类有没有关系。

我的环境是win2k + jBuilder,JDK是nokia s60 2nd ed
...全文
61 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧