Canvas的派生类作为MIDlet内部类初始化时为何不能调用构件器?
各位高手,问题是这样的:
我的一个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