首页 > 其他分享 >j2me开发FAQ整理

j2me开发FAQ整理

时间:2023-04-05 12:06:16浏览次数:42  
标签:FAQ Nokia 应用程序 jad 开发 使用 整理 j2me J2ME


什么是J2ME?
答:J2ME是Java 2 Micro Edition的简称,是SUN推出的针对嵌入式消费类电子产品的开发平台,例如手机、PDA和电视机顶盒等。事实上,J2ME是一整套技术和规范的集合。 

开发J2ME应用程序使用什么开发环境?
答:目前比较主流的开发环境有JBuilder、Eclipse和SUN Mobile等。本站推荐免费、开源功能强大的eclipse,读者可以参考如下文章搭建J2ME开发环境 

Configuration和Profile的区别和联系是什么?
答:目前,根据目前市场上移动设备的硬件特性划分出两个主要的Configuration,一个是Connected Limited Device Configuration和Connected Device Configuration,在Configuration层定义了Java的核心类库和虚拟机。而Profile则是根据设备的功能特性提供的一系列的API,比如Mobile Infomation Device Profile(MIDP)。 

什么是可选包?
答:由于设备的功能差别很大,如果用一个Profile进行概括不切合实际,因此根据不同的功能特性制定了相应的Profile,我们把他们叫做Optional Profile,比如Bluetooth。
可以参考介绍J2ME可选包的概念。 

J2ME中不支持浮点运算怎么办?
答:由于硬件的原因,在CLDC1.0中没有提供浮点数的支持,但是在CLDC1.1中这个问题已经解决了,如果你基于CLDC1.0开发的话可以使用第三方的函数库比如mathfp。 

哪里可以找到J2ME的参考API DOC?
答:可以在WTK_HOME/docs/api下找到,其中WTK_HOME是你wtk的安装目录例如C:/WTK21/docs/api 

如何在eclipse中使用nokia7210的模拟器和相关的API?
答:请参考开发NokiaS40系列应用程序初级篇 

J2ME开发时,服务器端必须要在运营商注册吗?
答:不需要 

如何在J2ME开发中使用混淆器?
答:推荐使用Proguards,请参考使用Proguard混淆J2ME应用程序 

联网的程序编译通过,运行的时候提示block之类的错误
答:联网应该在新线程中进行,检查一下自己的程序是否这么做的,关于联网可以参考本站专题

J2ME联网开发专题 
出现无法创建MIDlet的错误提示如何解决?
答:通常这样的问题是由于jad文件错误引起的,检查jad文件的Midlet-n的属性之是否正确 

如何把其他的图片格式转换为PNG格式的?
答:可以用Photoshop 

如何获得当前手机屏幕的大小?
答:使用Canvas类的getWidth()和getHeight()方法 

如何学好J2ME?
答:推荐看看这篇文章如何学好J2ME 

能否使用eclipseME+WTK2.1进行J2ME应用程序调试(debug)?
答:可以,注意选择windows->preferences->java->debug  不要选择suspend execution的前面两个选项,在debuger timeout选项中  第一个时间至少设置为15000ms  这样就可以调试了 

使用JBuilder和Eclipse开发J2ME应用程序,图片资源该如何处理并在程序中正常显示?
答:请参考关于Jbuilder和Eclipse中使用图片的问题

开发好的应用程序安装到手机的时候,会出现版本不合适等问题导致安装失败。
答:通常这样的问题是由于真机支持的CLDC/MIDP版本和应用程序版本不一致造成的,如果你确认你的应用程序可以在真机上运行,那么请修改你的jad文件。

如何在Eclipse中使用蓝牙包进行开发?
答:SUN发布的WTK2.2是支持蓝牙功能的,因此你需要使用EclipseME把WTK22集成到Eclipse开发环境中,在新建项目的时候把jsr082.jar加入到项目中,jsr082.jar的位置在WTK22_HOME/lib/jsr082.jar

如何正确解决J2ME开发中的中文问题?
答:请参考下面两篇文章,J2ME中文问题的解决方案  在J2ME中读取各种格式的文本文件

如何接受GET方式传输过来的中文数据?
答:推荐使用servlet规范中新推出的Filter组件,在Request传给servlet之前使用Filter对request进行编码的改变。

WAP开发和J2ME开发有什么异同?
答:用J2ME开发手机应用程序进行联网的时候,这时候实际上是client-server构架的,由J2ME程序本身提供UI和联网等操作的,我们要写大量的代码。用wml或者jsp servlet asp php等开发wap应用程序的时候,是browser-server构架的。我们只需要提供server端的程序,这些程序通过手机中的wap browser来解释显示给用户,就像用IE访问一样。 
  
ASP、PHP等技术可以用来和MIDlet进行联网通信吗?
答:可以

Nokia S40提供的J2ME API以及Nokia UI API能够播放mid吗?
答:不可以

如何通过J2ME获得手机的号码?
答:在J2ME提供的API中是不能实现这样的功能的,很多厂商可能会有自己的API来实现这样的功能,请参考他们的开发文档,另外,如果是c/s程序,在服务器端可以通过移动网关取得大多数的手机号码.phoneNumber= request.getHeader("x-up-calling-line-id"); 其中request是HttpServletRequest的对象

MIDP2.0中提供的PUSH技术要在什么环境下才能正常工作?
答:你必须把使用了PUSH的MIDlet Suite通过OTA的方式安装到手机模拟器上才可以,可以通过RUN via OTA(ktoolbar)

MIDP1.0中支持声音吗?
答:MIDP1.0中不支持,在MIDP2.0中包括了MMAPI的一个子集用来处理音频方面的需求

如何用J2ME访问手机文件系统上的文件?
答:一般是不可以的,如果你的手机支持JSR75的话,那么你可以使用FileConnection来进行操作。

如何对图片进行缩放?
答:在MIDP2.0中可以实现,请参考基于MIDP2.0实现图片的缩放功能 通过插值法借助Nokia UI API也可以实现,请参考J2ME插值算法实现图片的放大缩小

怎样用eclipse打开一个用eclipse建的项目?
答:File ——import ——existing project into workplace

如何在J2ME中解析XML?
答:可以采用第三方的程序kxml,如果手机支持jsr172的话那么可以使用j2me的标准库来完成。

J2ME应用程序中可以运行几个线程?
答:这是和设备相关的,通常在3-5个,需要你去查看设备的开发文档。

整理近期的一些blog,包括NokiaS60,Motorola,Eclipse的一些内容

Nokia S60的几个问题

1. 不能每帧调用 System.gc(),否则严重降低fps
2. Nokia S60机器的不同机型对于translate 和 setClip的处理不一样。在Nokia N-Gage QD等机型中,setClip是相对于translate以后的坐标计算的,而在Nokia 6600,6670等机型中,setClip不受translate的影响,永远只相对于屏幕左上角(0,0)点计算。所以如果在Nokia6670中,使用先translate再setClip的方法画子图,则会出现错误。为了统一代码,在Nokia S60中不要使用translate,即使用,两次translate之间不要进行setClip.修改后的画子图函数为:

public static void drawSubImg(Graphics g,Image img,int x,int y,int sx,int sy,int swidth,int sheight)
 { 
  g.setClip(x,y,swidth,sheight);  
  g.drawImage(img,x-sx,y-sy,GLT) ; 
  g.setClip(0,0,width,height) ;
 }


3. 部分Nokia机型(6600,6670等)退出后报错null pointer exception的解决方法
不要在在主while循环中调用destroyApp,而改成检测一个标志,退出主循环后再调用destroyApp
boolean exit ;
...
while(!exit){
...
  if(...){
    exit = true ;
  }
...
}

destroyApp(true);

注:可在destroyApp内部调用notifyDestroyed

Nokia"不能运行应用程序"错误新解 

    Nokia手机运行J2ME程序的时候出现“不能运行应用程序”的错误,一般都是内存不足引起的,但今天遇到这样的错误,却发现是另一个原因。即当使用nokia的UI API,DirectGraphics的drawImage时,如果旋转参数设置不当,也会出现“不能运行应用程序”的错误。

Eclipse集成Motorola模拟器

在Eclipse的菜单/工具条中选择Run->External Tools,打开面板后,选择program,然后new一个新的配置
1 在Location中填入Moto模拟器的路径,如:C:/Program Files/Motorola/SDK v4.2 for J2ME/EmulatorA.1/bin/emujava.exe,Moto的不同模拟器支持n种不同机型,需要看moto sdk的文档才知道。
2 在Arguments里填入执行的参数,包括jad路径,模拟器使用的机型。如:"${project_loc}/deployed/${project_name}.jad" -deviceFile Resources/V600.props
我是让模拟器执行deployed里面的jad/jar,${project_loc}是工程路径,${project_name}是工程名。这里选择的机型是V600.

说明:这种方法的局限在于只能执行jar,所以每次运行前必须打包。实际使用前需要为没种机型配置一个run,由于使用了通配参数,所以所有的工程都可以使用一个配置

Motorola手机J2ME应用问题

1 应用程序图标
  必须在jad 文件Midlet-Icon属性中指定图标文件,Midlet-1中指定的图标无效
  Moto V系列图标大小应为15*15,其他尺寸无法显示。

2 左右软键问题
 Motorola手机操作系统设定是:右软键确认,左软键取消。所以,我们的程序应该和这个习惯保持一致。

3 Key Code
 Moto V的key code不同于其他Midp2.0机器
左软键:21
右软键: 22
中键: 20
up: 1
down: 6
left: 2
right: 5

MIDP2.0 Canvas全屏问题

    MIDP2.0 Canvas可以调用setFullScreenMode(true)将Canvas设置成全屏,但设置成全屏后新的Canvas width & height的获得对于不同手机却并不一样。

1 MotoV系列
 调用setFullScreenMode(true)后,将触发sizeChanged事件,此事件从系统接受两个参数,即为Canvas全屏后的width & height,通过这个事件可以获得新的宽高。
  

protected void sizeChanged(int w, int h)
    {
        width = w ;
        height = h ;        
    }


但要注意,此事件并不是同步的,就是说如果你调用了setFullScreenMode(true)之后,立即使用新的width,height,有可能获得错误的结果。

2 SE K700
 调用setFullScreenMode(true)后,不会触发sizeChanged,而是通过getWidth和getHeight获得新的宽高。SE的setFullScreenMode调用后是立即返回的,所以可以获得正确的width & height

----------
对于其他机型暂时还不了解


百宝箱应用编译打包事宜

1 编译时,设置javac 的target vm为1.1即可通过移动检测。wtk中无法实现。在Eclipse中可以在java-compiler-Compliance and Classfiles中做以下设置:
Compiler compliance level: 1.4
Generated .class files compatibility: 1.1
Source compatibility: 1.3

2 用eclispe打混淆包。但eclipse编写jad中文会出现乱码,所以用wtk编写正确的jad,然后用wtk打包(注意不能覆盖eclispe打的包),这是为了用wtk获得正确的jad和manifest文件。将elcipse打包出的jar解压,用wtk生成的mainifest代替原jar中的mainifest文件,然后用winrar打包(zip格式,可选最大压缩,注意要选择所有的文件后打包,不要将外面的整个目录打包).最后将jad中的jar size改为这个最新的jar的字节数。

另:1. Nokia S60,SE k700机器中显示的游戏名字为MIDlet-1中的名字,而Nokia40为MIDlet-Name中的名字
    2. 根据sp提供的资料Nokia 7650 游戏不能用中文名(其实NGageQD可以)

标签:FAQ,Nokia,应用程序,jad,开发,使用,整理,j2me,J2ME
From: https://blog.51cto.com/u_15170706/6170534

相关文章

  • 7DGroup性能文章整理(持续更新)
    性能基础系列:性能基础之浅谈常见接口性能压测性能工具系列:性能工具之测试工具性能工具之监控工具性能工具之代码级剖析工具性能工具之内核调试工具性能工具之前端工具梳理性能工具之DOTNET性能分析工具性能工具之Java调试工具BTrace入门性能工具之Java调试工具JDBJMeter系列:性能工......
  • 阿里JAVA开发规范整理
    一、命名风格【强制】类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO/BO/DTO/VO/AO正例:MarcoPolo/UserDO/XmlService/TcpUdpDeal/TaPromotion反例:macroPolo/UserDo/XMLService/TCPUDPDeal/TAPromotion【强制】方法名、参数名、......
  • [性能测试实战30讲」之问题问答整理十七
    思考题:Tomcat的应用服务器,应该如何拆解监控计数器呢?我们应该如何判断应用服务器的线程是否够用?读者:1.如何判断代码快不快,我的理解是,压力工具中的线程数设置低于中间件的线程数,看看测试过程中服务器返回响应是否足够快2.如何判断应用服务器线程是否够用?测试过程中应用监控工具如jvi......
  • 白嫖党福利:国内免费访问ChatGPT网站整理
    前言考虑到学生和非计算机专业人士,本文整理了几个国内免FQ可以免费访问的ChatGPT网址。在撰写本文之前,我其实收集了很多网址,但经过亲测,目前仅有以下几个网址可用。,如果对ChatGPT使用需求量比较大的,建议通过如下链接注册一个,因为真的不知道哪天会失效,这事只能看脸。ChatGPT......
  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(13)-Charles如何进行Mock和接口
    1.简介Charles最大的优势在于抓包分析,而且我们大部分使用的功能也在抓包的功能上,但是不要忘记了,Charles也可以做接口测试。至于Mock,其实在修改请求和响应数据哪里就已经介绍了,宏哥就是在这里简单的提一下介绍一下它的理论知识,今天主要介绍和分享的是使用Charles进行接口测试实操......
  • 常用的一些配置文件整理
    前言在日常开发中常常需要引入一些其他依赖组件,但是准备配置文件却是一件麻烦的事情,本文旨在整理收集一些日常开发中需要用到的一些组件的配置。SpringBoot整合Mybatis整体目录结构如下pom.xml添加mysql、mybatis相关依赖<dependency><groupId>org.mybatis.s......
  • 【整理】html5知识点2
    1、=========================================================HTML5Canvas创建一个画布(Canvas)<canvasid="myCanvas"width="200"height="100"></canvas>使用JavaScript来绘制图像<script>varc=do......
  • 【整理】html5知识点1
    1、关于html5HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。HTML5的设计目的是为了在移动设备上支持多媒体。HTML5简单易学。HTML5是下一代HTML标准。HTML,HTML4.01的上一个版本诞生于1999年。自从那以后,Web世界已经......
  • 电梯演说选题及整理
    各位用户、合作伙伴:我们的产品“个人记账本”是为了解决中年(45~60岁),老年人(60岁)的痛苦,他们需要更加简单的文字录入方式,但是现有的方案并没有很好地解决这些需求,我们有独特的办法就是ocr图片文字识别,它给用户带来的好处是可以通过拍照的方式识别小票进行个人消费记录,远远超过竞争对......
  • Android Camera相关知识整理
    View相关原文:SerfaceView与TextureView的区别区别:Sureface有自己的Serface(由屏幕显示内容合成器(screencompositor)所管理的原生缓冲器的句柄)是一个单独的View,会在WMS中创建单独的窗口,有自己的渲染进程,不受UI层的控制,因此不能与其他UI组合在一起,不能进行平移缩放等变换。而Tex......