keyPressed函数怎样被调用的?
public class anji extends GameCanvas implements Runnable {
		public  Image img;
		public Sprite sp1;
		private Graphics gra;			
		public  anji() {
			super(true);			
		}
		public void paint(Graphics g) {
			gra=g;
			try{
				gra=this.getGraphics();
				img=Image.createImage("/car.png");
			sp1= new Sprite(img);
				gra=this.getGraphics();
			}catch(Exception ex){}			
			sp1.setPosition(this.getWidth()/2, this.getHeight()/2);
			sp1.paint(gra);//自带paint函数。后面会从写	
			new Thread(this).start();					
		}
		public void run() {						
			while(true){
				try{					
					draw();
					Thread .currentThread();
					Thread.sleep(100);
				}catch (Exception ex){}
			}			 					
		}
		protected void keyPressed(){
			System.out.println("111");
		int keyState = this.getKeyStates();
			if((keyState & LEFT_PRESSED)!=0){
				sp1.move(-5, 0);
			}									
			repaint();				
		}
		private void draw(){			
			gra.setColor(255,255,255);
			gra.fillRect(0, 0, this.getWidth(), this.getHeight());
			sp1.paint(gra);	
			this.flushGraphics();
		}	
	}	
}
为什么按键后没反应,也不打印,初学者,哪位高手指点一下,小弟不胜感激!!!!
------解决方案--------------------
程序的canvas是继承GameCanvas, midp2.0,在2.0中通常的做法是将游戏(应用)的输入方法放在线程中。在2.0中也可以使用keyPressed(),但1.0与2.0实现的按键响应原理不同,你的这个keyPressed方法写得不伦不类,何况keyPressed没有形参。最简便的就是把keyPressed加入线程,不过要改改方法名。还有在paint中不要gra=this.getGraphics(),gra=this.getGraphics()写在构造函数中
------解决方案--------------------
要继承Canvas,那个keyPerssed(int key)实际上是覆盖了Canvas中的keyPerssed(int key)方法,想得到按键响应,在此方法里面输出就可以了。
protected void keyPerssed(int key){
     System.out.println(key);//输出键值
      switch(key){
     case -6://可以按左软键得到,可能不是-6,根据输出的值为准
           //处理逻辑
     break;  
     。。。。。。
     }
}
而且,想要重新绘制用repaint()就可以了,它实际上是重新执行paint(Graphics g)方法,所以不用再写个绘制方法,也没必要再加个Graphics 的属性。如果发现没有刷屏,也可以加上刷屏的代码
     g.setColor(0xffffff);
    g.fillRect(0,0,getWidth(),getHeight());
这样就不会出现图片的“覆盖”问题了。