日期:2014-05-20  浏览次数:20711 次

高手们来看看:一个画小球简单程序的N多疑问<先县尝70分,全部解答出来者再补100分>
完整程序如下,其中注释部分都是疑问。如果谁可以按注释方式全部详细解答,我将增加100分奖赏。如果可以帮我解出其中一问,只给一分。二问二分。所有都解答,分全给。另有100分奖励。不好意思,我有点急于知道,就只好先这样了。


//以下是完整程序
import   javax.microedition.midlet.*;
import   javax.microedition.lcdui.*;

public   class   BallTest4   extends   MIDlet   implements   CommandListener   {

Display   display;  
BallCanvas   canvas;
private   Command   exitCommand   =   new   Command( "Exit ",   Command.EXIT,   1);

public   BallTest4()   {
display   =   Display.getDisplay(this);  
canvas   =   new   BallCanvas(display);  
canvas.addCommand(exitCommand);   //这里的canvas是指类BallCanvas,它并不是一个容器,如Form但为什么也可以有addCommand()方法?
canvas.setCommandListener(this);   //同上,为什么可以设置命令监听器
}


public   void   startApp()   {
canvas.start();
}


public   void   destroyApp(boolean   bl)   {
canvas.destroy();//这一行好像根本没用。因为没有用notifyDestroyed()
}


public   void   pauseApp(){}


public   void   commandAction(Command   c,   Displayable   s)   {
if   (c   ==   exitCommand)   {

destroyApp(false);  
notifyDestroyed();
}

}


public   class   BallCanvas   extends   Canvas   implements   Runnable{


int   posX=5,   posY=5;   //这里好像声明一下就行,没必要赋初值吧
int   ballSize   =   10;  
Display   display;   //奇怪,这里直接用Display来声明一个display而不是用Display.getDisplay(this);一时间难以理解

public   BallCanvas(Display   display){  
super();//这里的super()到底调用的是谁?是BallCanvas吗?请详谈一下。谢过。
this.display=display;//这一行也不是用Display.getDisplay(this)一时间难以理解。对不起我确实有点弱智。不过搞搞ME不是没有一点可能性的。


}

public   void   run()   {
while   (true){//这里的while(true)到底是干嘛呀,它是指?
this.posX   =   20;
this.posY   =   50;
try   {
Thread.sleep(100);  
}   catch   (InterruptedException   e)   {}
repaint();
}
}

void   start()   {
display.setCurrent(this);     //这里的this不知道什么意思
Thread   t   =   new   Thread(this);//这里的this又代表谁呢?
t.start();  
repaint();//这里为什么要用重绘。不用行吗?它起什么用?
}

void   destroy()   {
}

protected   void   paint(Graphics   g)   {
int   x   =   g.getClipX();
int   y   =   g.getClipY();
int   w   =   g.getClipWidth();  
int   h   =   g.getClipHeight();
g.setColor(0xffffff);   //这一行设置的是背景颜色吗?有必要吗?
g.fillRect(x,   y,   w,   h);   //这里一定要绘制矩形吗?它到底起什么用?对于这个程序。
g.setColor(200);
g.fillArc(posX,   posY,   ballSize,   ballSize,   0,   360);//这里换用g.drawArc()行吗?用g.fillArc()有什么好处?
}

}


}


------解决方案--------------------
1.请参api
http://java.sun.com/javame/reference/apis/jsr037/javax/microedition/lcdui/package-summary.html

这里的Command是这个包特别定义的, 这个程序貌似和awt没有联系, 因为没有import java.awt.*;

2.int posX=5, posY=5; //这里好像声明一下就行,没必要赋初值吧
赋初值是一个好习惯

3.Display display; //奇怪,这里直接用Display来声明一个display而不是用Display.getDisplay(this);一时间难以理解
如lz所说, 这是一个声明, 所以不必getDisplay了


4.super();//这里的super()到底调用的是谁?是BallCanvas吗?请详谈一下。谢过。