David.Wang 做你喜欢的事情

与大家分享和交流

显示断点测试

开发J2ME程序过程中,最困扰人的问题就是程序容易莫名其妙地死机。当使用JBuilder或者CodeWarrior设置断点功能来查找程序错误时, 死机的概率就更大了。即使不死机,也会担心程序受到了意外的干扰,所以一般不推荐使用开发工具自带的断点功能。但有时候又需要一个功能来显示当前各变量的 值,以便查错时做出正确的判断。于是我想了一个办法,就是编写自己的断点函数。具体代码如下:

  public class BlocksCanvas extends Canvas implements Runnable{

  private boolean stopFlag=false;

  //调试标志......public void run()

   {//断点位置1testFun(“x:”+x+“y:”+y);

  ......//断点位置 2testFun(“”);......

  }private void testFun(String str)

   {

  stopFlag=true;//画一个白色长方形

  bg.setGrayScale(255);

   bg.fillRect(0,0, fontW, fontH);//在白色长方形上显示str的内容

   bg.setGrayScale(0);

  bg.drawString(str, 0,0, Graphics.TOP   Graphics.LEFT);

  repaint();

  while(stopFlag)

   {}}

  public void keyPressed(int keyCode)

  { stopFlag=false;} }

  首先定义一个boolean类型的stopFlag变量来记录调试标志。一开始它的值为 false,进入testFun()函数后,值设为true。显示完str的内容后,因为stopFlag的值为true,所以while语句进入了死循 环,程序停了下来。这时可以仔细地看清楚变量的值。然后当按下任意键时,keyPressed()函数捕捉到这一事件,将stopFlag设为 false,死循环自动解开。使用此方法非常方便,只要在需要断点的地方放置testFun()语句即可,一个程序可以放置多个testFun()语句, 在循环语句中也可以放置testFun()语句。程序运行到testFun()语句会自动停下显示变量值,按任意键程序又会自动运行,程序也不会受到意外 的干扰。图1是调试时的截图。

  还有一点需要说明,此方法的testFun()语句必须放在run()函数中或者run()函数运行 时调用的函数中,否则就会因为while()占用了所有CPU时间而导致keyPressed()函数无法捕捉按键事件,最后导致死机。

   此方法只要稍加修改,就可以用做游戏的暂停功能,而且比sleep()方法好,毕竟理论上sleep()方法不能无限期暂停下去。下面给出相应的代码:

  public class BlocksCanvas extends Canvas implements Runnable

   {private boolean stopFlag=false;//暂停标志

  ......public void run()

  {......testFun();......}

  private void testFun()

  { while(stopFlag){}}public void keyPressed(int keyCode)

  {

   int action = getGameAction(keyCode);

   if(action== FIRE)stopFlag=!stopFlag;}

  }

  该程序段的功能为,当使 用者按下FIRE键时,游戏暂停;再次按下FIRE键,游戏继续运行

阅读更多
个人分类: JavaME
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭