1. S60机器上文字需要设置如

  1. public static final Font smallFont    =
  2. Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);

在需要写文字时候

  1. g.setColor(0xFFFFFF);
  2. g.setFont(smallFont);
  3. g.drawString(“需要写的文字”,0,0, g.TOP|g.HCENTER);

如果不设置字体颜色,他会自己默认一个颜色是上次设置的,字体是系统默认(大字体)。

在QB上不需要每次写文字时候都设置文字字体,直接

  1. g.drawString(“需要写的文字”,0,0, g.TOP|g.HCENTER);

它的字体是上次设置的字体。(如果程序中都使用的是小字体只需要设置一次字体即可。)

2. 模拟器中支持

  1. String str ="字符串";
  2. str=str.intern();    //将字符对象串转化成字符串
  3. if( str == "字符串" )   //可以返回真

真机上是不支持该方法只能用

  1. if( str.equals("字符串") )   //才能返回真

如果也用上面的方法 得不到想要的结果的。

3. j2me没有浮点数

  1. Role.MONEY *= 9/10;

结果

  1. Role.MONEY=0;

只能

  1. Role.MONEY = Role.MONEY*9/10;

4.

  1. imgRens    = Image.createImage("/pics/state.png");        //人物状态
  2. imgState    = new Image[4];
  3. imgWidth= 10;
  4. for( int i=0; i<imgState.length; i++ )
  5. {
  6. //    imgState    = Image.createImage( imgWidth, imgRens.getHeight() );
  7. imgState    = DirectUtils.createImage( imgWidth, imgRens.getHeight(), 0x00000000 );
  8. gren        = imgState.getGraphics();
  9. gren.drawImage(imgRens, -imgWidth*i, 0, Graphics.TOP|Graphics.LEFT);
  10. }
  11. gren   =null;
  12. imgRens=null;
  13. System.gc();

模拟器用DirectUtils建的图片时候运行出问题,不过真机上没问题。可以生成JAR使用!

5.

  1. public void run()
  2. {
  3. try
  4. {
  5. while( true )
  6. {
  7. //    if( isStopGame ) continue;            //如果暂停游戏
  8. updatas++;
  9. switch (State)
  10. {
  11. case S_GAME_MAP:if( isStopGame ) break;    if(gamemap!=null)gamemap.updata(updatas);    break;
  12. case STATE_MBOX:    setState(S_COVER);    break;    //切换到游戏状态
  13. case STATE_LOAD_CMCC:    State=STATE_CMCC;    break;
  14. case STATE_CMCC:    State=STATE_MBOX;    break;    //切换到第二屏
  15. }
  16. this.repaint();        //有需要时才重新绘制
  17. Thread.sleep(sleepTime);
  18. }
  19. }    catch (Exception ex){}
  20. }

如果使用注释掉的代码暂停游戏60会死机.v300.k700不会死掉.所以在60上只好用注释下面的那个暂停了!

6.关于随机数对0求余的问题

  1. iRand() % 0;

一个正整数对0求余会抛出java/lang/ArithmeticException这个错误
不过 一些机器上(S60.K700.V300)还是会强制iRand() % 0=0的(但是会卡一下)
但是 S40报错之后无法继续运行。
所以 S40上不要出现对0求余运算!

7.

  1. int a=1000000000;
  2. int b=1000000000;
  3. int c=a*b;
  4. System.out.println("c="+c);

这样写编译器允许,不过结果是错误的C的值已经超过INT的范围了,他会自动截取INT的32为,其他位为益出。

  1. byte a=100;
  2. byte b=100;
  3. byte c=a+b;

这样写编译器不允许,必须byte c=(byte)(a+b);才能通过。

8. 偶尔在程序中用到了浮点数,部分模拟器,真机通过了!

  1. (int)( ax*Math.sin(dx/10)/precision );

正弦曲线使用Math.sin( dx/10 ),dx/10为Double类型,输入参数为Double,也就是弧度,返回也是Double,即对应弧度的正弦值,经测试 Math.sin( Math.PI/2 ) 返回1, Math.sin( Math.PI )返回0,
Nokia s60模拟器通过测试,可以使用。
Nokia 6230i 和 Sony Ericsson k700 真机通过测试,可以使用!
其他机型 估计新出的能通过,Nokia S60系列机器不能使用,如3230,6670等。
相信 J2ME支持浮点运算只是个时间问题!

9. 方法体大小是有限制的!
不可以超过65535个字符!
    通常不会有这么多个字符,但是在写一些地图数组的时候方法体就可能很大,如果出现IDE报错,那么你就应该考虑是不是方法体过大了!结果办法就是 把地图数组写成资源文件,在程序中调入,解析,在使用!

  1. /*
  2. * 生成 地图数文件Created on 2005-10-13
  3. */
  4. import java.io.DataOutputStream;
  5. import java.io.FileOutputStream;
  6. public class mapData
  7. {
  8. byte[][] mapData =   //某一地图 图片数组
  9. {
  10. };
  11. int        dataBH        = 6;                    //0//地图编号        (地下城2.3.4.5)
  12. int        dataYs        = 3;                    //1//元素图片编号
  13. int    dataHs        = mapData.length;        //2//行数
  14. int    dataLs        = mapData[0].length;    //3//列数
  15. int    dataPz        = 41;                    //4//碰撞点
  16. String    fileName    = "map"+dataBH+".gl";    // //文件名
  17. DataOutputStream out= null;
  18. public static void main(String[] args)
  19. {
  20. mapData a = new mapData();
  21. try
  22. {
  23. a.out = new DataOutputStream( new FileOutputStream( a.fileName ) );
  24. }    catch(Exception e)    {}
  25. a.writeByteArray();
  26. }
  27. public void writeByteArray()
  28. {
  29. try
  30. {
  31. out.writeByte( dataBH );    //地图编号        0
  32. out.writeByte( dataYs );    //地图元素编号    1
  33. out.writeByte( dataHs );    //行数            2
  34. out.writeByte( dataLs );    //列数            3
  35. out.writeByte( dataPz );    //碰撞点        4
  36. for( int i=0; i<mapData.length; i++ )
  37. {
  38. for( int j=0; j<mapData[0].length; j++ )
  39. out.writeByte( mapData[j] );
  40. }
  41. } catch(Exception e){}
  42. }
  43. }

这个J2SE程序可以生成一个MAP1.GL的文件,文件中的数都是BYTE类型的 。

  1. /----------------------------j2me中的地图类----------------------------------------------------------------/
  2. /*读文件*/
  3. public byte[] readFile(String filename)
  4. {
  5. byte[] data = null;
  6. try
  7. {
  8. InputStream in = this.getClass().getResourceAsStream(filename);
  9. in.read( dataIndex, 0, 5 );
  10. data = new byte[ dataIndex[2]*dataIndex[3] ];
  11. in.skip( 0 );
  12. in.read( data );
  13. in.close();
  14. }
  15. catch(Exception e){e.printStackTrace();}
  16. return data;
  17. }
  18. /*解吸文件*/
  19. public byte[][] readMapData( String filename )
  20. {
  21. int k=0;
  22. byte[] data = readFile(filename);
  23. byte[][] map = new byte[ dataIndex[2] ][ dataIndex[3] ];
  24. for( int i=0; i<dataIndex[2]; i++ )
  25. {
  26. for( int j=0; j<dataIndex[3]; j++ )
  27. {
  28. map[j] = data[k];
  29. //                System.out.print(data[k]+"," );
  30. k++;
  31. }
  32. //            System.out.println("" );
  33. }
  34. return map;
  35. }

在 构造函数中

  1. byte[][]   map = readMapData("/res/map"+this.mapNum+".gl");//读文件/解吸/地图数组

就可以得到地图数组
地图信息已经写到

  1. byte[] dataIndex 中了,需要添加其他信息可以更改 dataIndex 的大小

10. 字符串连接 与 ?: 判断符号 优先级

  1. String str0 = "abd";
  2. String str1 = "123" + str0==null ? "null" : str0 ;

表达试中 ? : 的优先级没有 + 的高
所以 计算结果等于

  1. String str1 = ("123" + str0) ==null ? "null" : str0 ;

所以 要的到 str0不等于NULL的结果,可以

  1. String str1 = "123" + (str0==null ? "null" : str0 );

11. 当定义一个对象数组出现没有初始化错误时候:

  1. int typeSum = 10;
  2. JTextField[] jTextField1 = null;
  3. jTextField1     = new JTextField[typeSum];

这样并未初始化 jTextField1[0]..jTextField1[9]等对象!
这就要看JTextField类的构造函数了
public class JTextField extends JTextComponent
这个类JTextField也是继承来的
构造函数:

  1. public JTextField() {
  2. this(null, null, 0);
  3. }
  4. public JTextField(String text) {
  5. this(null, text, 0);
  6. }
  7. public JTextField(int columns) {
  8. this(null, null, columns);
  9. }
  10. public JTextField(String text, int columns) {
  11. this(null, text, columns);
  12. }
  13. public JTextField(Document doc, String text, int columns) {
  14. ...
  15. }

等等..

  1. jTextField1     = new JTextField[typeSum];

这句话调用的是

  1. public JTextField() {
  2. this(null, null, 0);
  3. }

这个构造函数
所以没有正确初始化 jTextField1这个数组
可以在使用前

  1. for( int i=0; i<typeSum; i++)
  2. {
  3. jTextField1 = new JTextField();
  4. }

初始化就不会报错拉!

转载于:https://blog.51cto.com/kome2000/578319

模拟器与真机的程序差别J2ME相关推荐

  1. 【为什么要用真机】——谈模拟器与真机的差别

    今天语音对话应用调试时要用两台手机,无奈模拟器打开不了app.网上查阅资料,发现我的问题应该是模拟器无法获取语音权限导致的.感觉这篇文章比较全面,分享给大家参考,同时也建议大家尽量用真机测试.转载地址 ...

  2. android 区分 真机模拟器_Android模拟器和真机总结的九点区别 Android程序如何在手机上运行...

    Android是一个包括操作系统.中间件.用户界面和关键应用软件的移动设备软件堆.换言之,Android是基于Java并运行在Linux内核上的轻量级操作系统,其功能全面,包括一系列Google公司在 ...

  3. app测试模拟器和真机区别

    转载1: 平时测试过程中,经常有组内同学们问,使用模拟器测试完之后,是否可以代替真机的兼容测试了. 先来看看模拟器和真机的直观区别: 多点触摸(比如两个手指放大文本字体大小) 网络通话(没有真实的呼入 ...

  4. 制作模拟器和真机通用静态库

    通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...

  5. Android识别模拟器,判断是模拟器还是真机

    文章目录 前言 原理 禁止模拟器安装apk 代码识别 验证 最后 前言 对于android开发者来说,模拟器是开发工具,但是对用户来说,可能就是薅羊毛.找漏洞的赚钱工具. 不管是活动风控还是内容保护等 ...

  6. 使用工具检测你的app:模拟器和真机测试 之一

    在本章,你将学到下面这些内容: 模拟器和真机测试环境的不同. 内存管理是如何影响一个app的性能. 检测app的工具和技术包括: 1)基本的测试内存和性能的工具. 2)测试内存管理方面比较复杂的工具, ...

  7. 合并模拟器和真机的静态库动态库aggregate

    创建Aggregate的target 在Build Phases 添加Run Script,内容为 scriptFile=${SRCROOT}/universalA.sh sh ${scriptFil ...

  8. Android Screen Monitor抓取模拟器与真机界面

    ASM(Android Screen Monitor)下载地址: https://code.google.com/archive/p/android-screen-monitor/ 获取ASM.jar ...

  9. iOS判断是模拟器还是真机

    [代码]iOS判断是模拟器还是真机 #if TARGET_IPHONE_SIMULATOR//模拟器 #elif TARGET_OS_IPHONE//真机 #endif 转载于:https://www ...

最新文章

  1. 如何删除被锁定的文件(一)他山工具篇 WhoLockMe?
  2. 关于静态类初始化问题----CSharp
  3. createprocess 系统找不到指定的文件_windows找不到gpedit.msc请确定文件名
  4. java 增量编译_java增量/全量编译接口应用
  5. .php t=,关于php:意外的T_VARIABLE,期望T_FUNCTION
  6. javascript设计模式系列 - LukeLin - 博客园
  7. k8s pod MySQL环境变量_Kubernetes 配置Pod和容器(一)定义容器环境变量
  8. php xingnengfenxi_php代码性能分析方法
  9. 计算机设备管理程序在哪,怎么打开设备管理器
  10. Changing a remote's URL
  11. 一本通1619【例 1】Prime Distance
  12. 串口服务器虚拟串口失败,串口服务器常见问题
  13. Julia 下载 安装 juno 开发环境搭建
  14. 【Windows 8】pid为4的system进程占用80端口的解决办法
  15. Power BI 客户端 安装 错误
  16. S-8254A------3节/4节电池串联用电池保护IC
  17. flutter 打开设置面板进行基本设置
  18. excel2007计算机试题,巧用excel2007/2003进行拍照
  19. Unity3D 网页插件Embedded Browser(ZFBrowser)PC端打包文件无法加载网页解决方法
  20. 大数据分析必学的六个核心技术点

热门文章

  1. 小程序引入的echarts过大如何解决_小程序如何解决社区团购的痛点
  2. typescript接口使用
  3. recv java_Java与Python的recv()网络函数的等价性
  4. java 类文件_Java类文件概述
  5. [CSS3] touch-action设置移动端拖动行为
  6. xp和linux的引导文件,Linux与XP双系统中grub引导配置笔记
  7. 导出mysql某个表数据_MYSQL使用mysqldump导出某个表的部分数据
  8. 20200127:(leetcode)四数之和(动态图解)
  9. java中int边界值_数组中重复的数字2019.12.06
  10. kafka性能高的影响因素