public void paintagain(){
try{
         super.paint(g);
         repaint();
        }catch(Exception e)
        {
            e.printStackTrace();
         } 
}
protected  void keyPressed(int keyCode)         
{       
int keyState =  getGameAction(keyCode) ;      //判断上下左右键是否被按下      
switch (keyState){
        case Canvas.LEFT:
            i-=10;
            paintagain();
            break;
        case Canvas.RIGHT:
            i+=10;
            paintagain();
            break;
        case Canvas.UP:
         j-=10;
         paintagain();
         break;
        case Canvas.DOWN:
         j+=10;
         paintagain();
         break;
        }

}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【nightwindhb】截止到2008-07-15 15:53:44的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:70                       每贴平均分数:35                       
    回帖的总数量:5                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:2                        结贴的总分数:70                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    protected  void keyPressed(int keyCode)  是实现的KeyListener接口还是继承自KeyAdapter?怎么没见过这种类型的时间。
    可以尝试时间监听器实现KeyListener接口或者继承KeyAdapter类。
    然后重写keyPressed方法
    里面判断的时候KeyEvent.VK_UP表示向上按钮被按下 ,其余类推
     public void keyPressed(KeyEvent e) {}
      

  3.   

    import javax.microedition.lcdui.Canvas;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Display;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.midlet.MIDlet;
    import javax.microedition.midlet.MIDletStateChangeException;public class MyMidlet extends MIDlet implements CommandListener{
    private Command exitCommand;    
    private MyCanvas myCanvas;    
          

    public MyMidlet()
    {
    //canvas=new MyCanvas(); //创建MyCanvas对象
    exitCommand =new Command("Exit",Command.EXIT,1);        
    myCanvas =new MyCanvas();        
    myCanvas.addCommand(exitCommand);
         myCanvas.setCommandListener(this);    
    }

    public void startApp()
    {
    Display.getDisplay(this).setCurrent(myCanvas); //显示MyCanvas
    }
    public void pauseApp() {
    }
    public void destoryApp(boolean unconditional)
    {} protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    } public void commandAction(Command arg0, Displayable arg1) {

    }
    }第一个文件
      

  4.   

    import javax.microedition.lcdui.Canvas;
    import javax.microedition.lcdui.Graphics;
    import javax.microedition.lcdui.Image;
    import javax.microedition.lcdui.game.GameCanvas;public class MyCanvas extends GameCanvas{
    protected MyCanvas() {
    super(false);
    } private Image image;
    private int sum=0;
    private int i=0;
    private int j=50;
    private Graphics g;

    public void paint(Graphics g){ //重载paint方法 if(sum == 0)
    {
    paintdraw(g);
    }
    }
    public void paintdraw(Graphics g){
    try
    {
    image=Image.createImage("/logo.PNG");
    sum+=1;
    }
    catch(java.io.IOException e)
    {
    System.out.println(e.getMessage());
    }
    g.setColor(0x00ffff00);
    g.fillRect(0,0,this.getWidth(),this.getHeight());
    g.drawImage(image,i,j,g.TOP|g.LEFT);
    } public void paintagain(){
    try{
             super.paint(g);
             repaint();
            }catch(Exception e)
            {
                e.printStackTrace();
             } 
    }
    protected  void keyPressed(int keyCode)         
    {       
    int keyState =  getGameAction(keyCode) ;      //判断上下左右键是否被按下      
    switch (keyState){
            case Canvas.LEFT:
                i-=10;
                paintagain();
                break;
            case Canvas.RIGHT:
                i+=10;
                paintagain();
                break;
            case Canvas.UP:
             j-=10;
             paintagain();
             break;
            case Canvas.DOWN:
             j+=10;
             paintagain();
             break;
            }

    }
    }
    第二个文件
    我估计空指针的地方是我发贴的时候贴出来那部分代码
      

  5.   

    是不是问题出在我的private Graphics g; 这里?因为写这里的时候是因为我的keyPressed(int keyCode) 函数与上面的paint函数以及paintdraw函数都联系不上无法承接来自里面的graphics参数.所以直接声明了一个函数进行画图.感觉这样确实没有参数传递进来而且很容易空指针.不过话这么说我该怎么解决这个问题呢?
      

  6.   

    把private Graphics g;删掉试试。另外你的代码也写的很奇怪,那两个paint函数都在原来的paint里实现多好啊,干嘛要分开。还有图片要在其他地方加载,最好是初始化的时候。
      

  7.   

    由于windows限制,失去了焦点,就无法监听key了,
    可以试试http://www.swtui.cn/