现在的位置: 首页 > 综合 > 正文

Nokia的BUG吗?模拟器运行,真机上无反应.

2012年02月22日 ⁄ 综合 ⁄ 共 4716字 ⁄ 字号 评论关闭

update 2006/2/18 今天看到 j2me 手机游戏编程入门 英文名是 Beginning Mobile Phone Game Programming 书中提到的一个范例程序High Seas似乎也有我提到的这个问题 .赶紧试验了一下, 传到真机上(我的6600)后 果然一运行,就退出了. 看来写书的人也不是十分严谨阿..
  下载地址: http://www.michaelmorrison.com/mambo/index.php?option=com_remository&Itemid=54&func=download&filecatid=21
  
_______________________________________________________
 时间: 2005/12/19 日
 现象是    年前写的一个程序,代码见备注部分. 在模拟器上没有问题. 但是真机上到运行之后没有反应. 运行之后就退出来了.
   实在让人困惑不已. 我做了如下的方面的排查: 


      1. 怀疑Borland的Jbuilder过期了,重新安装了新版本的Jbuilder. 依然不行.
      2. 因为之前因为中文的问题我修改过 Jbuilder.config, 所以怀疑是编码方面的问题,把Jbuilder的编码改成GBK .GB2312 ,编译->传到手机->安装 仍然不行.
      3. 尝试去掉一些会造成异常的代码. 最后就剩下了现在的这个很简单的代码框架了. 可是  编译->传到手机->安装 仍然不行. (反反复复的注释掉一些代码, 结果还是不行.. 实在是没有办法了. 睡觉了...) 
     4. 第二天早上, 我把代码传给lipeichuan同学, 结果也是不可以, 这样就排斥了我的开发工具的问题.
    第二天,  重新建了一个工程,重写了一遍代码. 编译->传到手机->安装  ok 了!!(莫非真的是家里的机器有问题?? 此时又强烈的怀疑 Windows2000 和 WindowsXp的文件编码不兼容... 好人都快疯了, 呵呵)
    因为时间比较紧,也就没再继续试验, 接着把程序写完了. 

    如果就这么完了,估计我也就发现不了这个bug了.偏偏事隔几个月, 同样的错误又出现了, 简直是如出一辙, 我因为上次的经验,认为就是新建一个工程就可以了, 然而这次却不好使了.. 编译->传到手机->安装 仍然不行.
   ... 我这个郁闷阿... 
   从星期天早晨到下午 到晚上 到夜里, 我依然重复着上次的操作,来排除错误, 并希望找到真正的原因, 也心存侥幸的希望这次只要能在手机上运行就可以了.. 奇迹并没有出现, 直到我无意间做了一个操作,就是更改了一下一个函数名, 以前有一个函数叫 Update 我去掉了,这次竟然 ok 了..  
   这或许就是犯地名了吧.. ft... 我查了一下似乎没有明确禁止使用 Update 这个关键字的.. 
   我翻了翻以前的那个工程代码, 也是用了一个 Update的函数名,看来这个是 Nokia 真机上的一个bug, 我没有尝试给其他的手机运行, 这个工作我也准备由大家来完成测试.   测试一下是不是只有 Nokia 不支持 Update函数名..  
   下载testapp 测试程序.  codetest.rar 源码下载.  
   并请将结果反馈给我. 由大家一起来验证一下这个Bug是不是真的存在.. 
   这个项目我已经放到 base.google.com  上面了..  http://base.google.com/base/items?customerId=1015546&offerId=6306879176991597515
 
[资源]
midlet.java 

import javax.microedition.midlet.*;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Display;

//构造函数.
public class quiz extends MIDlet {
  private quizCanvas  menu;
  public quiz() {
     menu = new quizCanvas(this);
  }

  /**
   * startApp
   */
  protected void startApp() {

    Display.getDisplay(this).setCurrent(menu);
  }

  /**
   * pauseApp
   */
  protected void pauseApp() {
  }

  /**
   * destroyApp
   *
   * @param boolean0 boolean
   */
  protected void destroyApp(boolean boolean0) {
  }
  public void quitApp(){
    destroyApp(true);
    notifyDestroyed();

  }
}

Canvas.java

import com.nokia.mid.ui.*;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Font;
import javax.microedition.midlet.MIDlet;

public class quizCanvas extends FullCanvas implements Runnable{

 //菜单项定义.
  private final byte GM_MENU_START =0;
  private final byte GM_MENU_SET =1;
  private final byte GM_MENU_HELP =2;
  private final byte GM_MENU_ABOUT =3;
  private final byte GM_MENU_EXIT =4;

  private final byte PL_START =0;

  Font  font1 = javax.microedition.lcdui.Font.getFont(0, 1, 16);
  Font  font2 = javax.microedition.lcdui.Font.getFont(0, 0, 8);
  //
  private byte CurMenuID; //当前菜单项.
  private Image bg1;
  private Graphics offscreen;
  private byte GameState;
  private quiz lunchquiz;

  public quizCanvas(MIDlet midlet) {
    this.lunchquiz =(quiz) midlet;
    bg1 = Image.createImage(176, 208);
    offscreen = bg1.getGraphics();
    GameState =0;
    CurMenuID= GM_MENU_START;
   // repaint();
    new Thread(this).start();
  }

  //更新画面.画菜单.
  public void update(){
    DrawMenu();
  }

  //画菜单.根据菜单坐标 和图 画.
  private void DrawMenu(){
    //画菜单.
   offscreen.setColor(0x333333);
   offscreen.fillRect(0, 0, 176, 208);

   offscreen.setFont(font2);
   //draw Select Rect.
   offscreen.setColor(0x003366);
   int dy =68+CurMenuID*21; //89,110,135
   offscreen.fillRect(36,dy,111,18);
   offscreen.setColor(0xffffff);
   offscreen.drawRect(36-2,dy-2,111+2,+18+2);
   //dx,dy
   offscreen.drawString("GameMenu 2006",54,25,Graphics.TOP|Graphics.LEFT);
   offscreen.drawString("开始游戏",63,68,Graphics.TOP|Graphics.LEFT);
   offscreen.drawString("设置参数",61,90,Graphics.TOP|Graphics.LEFT);
   offscreen.drawString("查看帮助",61,111,Graphics.TOP|Graphics.LEFT);
   offscreen.drawString("退出游戏",61,136,Graphics.TOP|Graphics.LEFT);
  }

  /**
   * paint
   *
   * @param graphics Graphics
   */
  protected void paint(Graphics graphics) {
    graphics.drawImage(bg1,0,0,graphics.TOP|graphics.LEFT);
  }

  /**
   * run
   */
  public void run() {
    while(GameState!=100)
     {
      update();
      repaint();
      serviceRepaints();
   //
   try {
     Thread.sleep(60);
   }
   catch (InterruptedException ex) {
    }
   }
   lunchquiz.quitApp();
  }
  public void keyPressed(int keyCode){
    if (keyCode == this.KEY_UP_ARROW) {
     CurMenuID -= 1;
   }
   if (keyCode == this.KEY_DOWN_ARROW) {
     CurMenuID += 1;
   }
   if (CurMenuID < 0) {
     CurMenuID = 3;
   }
   if (CurMenuID > 3) {
     CurMenuID = 0;
   }
    if (keyCode == -6) {
      GameState = 100;
    }
  }

}

Java 關鍵字列表 (依字母排序 共51組):

abstract, boolean, break, byte, case, catch, char, class, const, continue, default,
do, double, else, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while.

Java 保留字列表 (依字母排序 共12組) : Java保留字是指現有 Java 版本尚未使用 但往後版本可能會納入的相關字彙.

byValue, cast, false, future, generic, inner, operator, outer, rest, true, var. 

     

抱歉!评论已关闭.