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

popy007 popy007 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位高手,问题是这样的:

我的一个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
...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
popy007
J2ME 13,096 成员 26,491 内容