怎样将自己编的java程序移植到手机上运行? 运行自编经典“Hello World!” n73 - 飘凌大杂烩
飘凌大杂烩电脑网络手机数码手机怎样将自己编的java程序移植到手机上运行? 运行自编经典“Hello World!” n73
    
 
怎样将自己编的java程序移植到手机上运行? 运行自编经典“Hello World!” n73
发起人:piaoling  回复数:13  浏览数:10788  最后更新:2010/2/7 20:31:44 by piaoling

选择查看 搜索更多相关主题  帖子排序:
2010/2/7 20:27:59
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
怎样将自己编的java程序移植到手机上运行? 运行自编经典“Hello World!” n73

用JBuilder制作jar文件时,选择jad版本信息的时候,应该准确的填写。JBuilder9制作Midlet Suit jar时的MIDP的默认值是2.1,CLDC的默认值是1.1。

n73 Java:MIDP2.0、CLDC 1.1、3D API、PIM API、

5610xm Java MIDP 2.0

 

下面贴一段java程序的代码,这个小示例程序是在手机的屏幕上写出一行字“Hello World!”来。

package testform1;

//导入必要的包,这两个包是必须要的。
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

//必须有一个主类,该类继承自MIDlet实现了CommandListener接口
public class TestForm1 extends MIDlet implements CommandListener{

/*私有变量:
display相当于手机的屏幕,
form相当于一个可以容纳很多对象的容器,
可以在上写字
command 菜单按钮
*/  
private Display display;
  private Form form;
  private Command command1,command2;
//构造函数
  public TestForm1() {
    display = Display.getDisplay(this);
    form = new Form("My First Java App");
    command1 = new Command("退出",Command.EXIT,1);
    command2 = new Command("添加文字",Command.ITEM,1);
//将菜单按钮添加到form中去,并且为它们注册侦听器
    form.addCommand(command1);
    form.addCommand(command2);
    form.setCommandListener(this);
  }
//以下5个函数,除了自己定义的那个,其他四个都是必须要的
  public void startApp(){

    display.setCurrent(form);

  }
  public void pauseApp(){

  }
  public void destroyApp(boolean _boolean){

  }
//这个函数是自己定义的。
  public void appendString(){
    form.append("Hello World!\n");
    
  }

//侦听到用户选择相应的按钮的时候,要执行的动作
public void commandAction(Command command, Displayable displayable){
    if(command == command1){
//程序暂停
      notifyDestroyed();
    }
    if(command == command2){

      appendString();
      //notifyPaused();
    }
  }
}

编译运行,最后打包成jar文件,传到手机上安装,就可以在手机上执行了。

2010/2/7 20:28:19
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

用Eclipse开发J2ME手机游戏 第四讲 创建经典的HelloWorld程序 

 引言

  前面几篇文章已经介绍了Eclipse及其工作环境的安装、配置过程,并完成各项相关准备工作。因此从本文开始将讲述如何使用前面配置好的Eclipse开发环境来创建J2ME项目,开始真正的J2ME开发之旅。由于这是创建的第一个J2ME程序,按照程序开发的惯例,这头把交椅自然又是非"Hello World"莫属了。HelloWorld虽然功能简单,但是麻雀虽小,五脏俱全,通过这个小程序的开发,完全能够达到让读者熟悉J2ME程序开发一般流程的目的。

  创建J2ME项目

  与其他语言应用程序的开发类似,在开发一个J2ME程序时也要首先新建一个项目(工程)所有后续的编码、调试和运行都是在这个工程中进行。在启动Eclipse后,点击"文件"菜单下"新建"菜单弹出的"项目"菜单项。将弹出如下所示的新建项目向导对话框:


  首先需要指定创建的是什么项目,展开J2ME项目,选中J2ME Midlet Suite子项后进入下一步。该向导页(如下所示)用来设置项目名称和项目存放路径。一般取缺省路径即可,项目名称自然是经典的"HelloWorld"了。设置完毕后继续下一步的设置。






  此向导页需要对应用程序所支持的MIDP版本进行指定。如果考虑兼容性的话可以选择J2ME Wireless Toolkit 2.1 MIDP 1.0 platform。当然也可以选择MIDP 2.0,但是目前支持MIDP 2.0的手机毕竟还是少数。点击下一步对Java构建设置进行定义,通常取默认值就可以了。点击完成按钮后EclipseMe将会自动设置好项目的编辑及运行环境。可以在导航器视图中点击HelloWorld.jad项,在右侧编辑视图中将可以查看EclipseMe生成的项目结构:


  创建J2ME应用程序

         

  刚才创建的是MIDlet Suite,一般也称作MIDlet应用程序套件,可以包含一个或多个MIDlet,只是在发布时是以MIDlet Suite为单位进行。实质性的工作都是在MIDlet中完成的。因此,需要继续添加MIDlet到项目。在导航器上点击鼠标右键,从弹出菜单中选择"新建"、"其他"菜单项启动上图所示对话框,选择J2ME下的J2ME Midlet子项后进入下一步:

           

  这里需要指定包(也可以取缺省值)和名称,点击完成后EclipseMe将自动生成框架代码。可以添加必要的功能代码(阴影部分)到其中,以达到"Hello World"字符显示的目的。

package demo;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class HelloWorldMIDlet extends MIDlet {
 private TextBox textbox;
 public HelloWorldMIDlet() {
  super();
  textbox = new TextBox("测试程序", "Hello World!", 20, 0);
 }
 protected void startApp() throws MIDletStateChangeException {
  Display.getDisplay(this).setCurrent(textbox);
 }
 protected void pauseApp() {
 }
 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 }
}

  在添加上述功能代码后会发现在前面有错误图标出现,这是由于没有导入相应的包所致。这有点类似于C++语言中缺少所引用的头文件。与C++需要手工添加对头文件的引用不同,在Eclipse中可以点击"源代码"菜单下的"组织导入"菜单项,EclipseMe将自动添加需要的包到工程:

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;

  运行HelloWorld






  代码已经编写完毕。点击"运行"菜单下的"运行……"菜单项以弹出如上图所示配置界面。在左侧配置窗口中鼠标右键点击"Wireless Toolkit Emulator"并选择弹出菜单的"新建"菜单项,在右侧将显示如下所示的运行配置属性页,一般可选缺省设置。也可以在"Emulation"选项卡中对默认设备进行指定。通常用"DefaultClolorPhone"项即可,其模拟的是在彩屏手机上的运行效果。由于目前支持Java的手机一般配置都不是很低,绝大多数也都是彩屏配置,因此"DefaultClolorPhone"选项应该是比较大众的。当然,如何用户需要,也可以设置"DefaultGrayPhone"等其他项目以模拟在单色或其他配置的手机上的运行效果。

  最后,点击运行按钮执行我们刚才创建的第一个J2ME程序,将弹出如下所示的一个彩屏手机图案的窗口。这便是手机模拟器,可以在其上模拟手机的全部按键,功能与真机相同。观察其屏幕,显示的正是刚才编写的J2ME程序所显示的"Hello World"字样。虽然仅仅是几个字符的显示,但却标志着我们已经开始进入J2ME世界。在下一篇文章,将对J2ME程序的真机发布过程进行讲述,完成一个真正手机应用程序的制作和发布。

From: http://dev.yesky.com/SoftChannel/72342371878043648/20050409/1933380_2.shtml

2010/2/7 20:28:35
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
J2ME Wireless Toolkit
Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本,分别是1.0.4, 2.0, 2.1和2.2。每个版本都包括英语,日语,简体中文,繁体中文4个语种包。
1.0.4版只能够开发MIDP1.0 应用程序。
2.0版只能够开发MIDP2.0 应用程序。
2.1版则可以同时开发MIDP1.0、 JTWI(CLDC 1.0, MIDP2.0, WMA1.1)可改用CLDC1.1或加入MMAPI1.1),自定义(自己随机组合Configuration, Profile以及Optional Package)三种环境下的应用程序。
2.2版中,WTK全面的支持JTWI规范。具体的说,即MIDP 2.0, CLDC 1.1, WMA 2.0, MMAPI 1.1, Web Services (JSR 172), File and PIM APIs (JSR 75), Bluetooth and OBEX APIs (JSR 82), and 3D Graphics (JSR 184);同时您也可以使用该版本开发面向CLDC1.0 和MIDP1.0的应用程序。

系统要求上,WTK2.2至少需要50MB可用硬盘,128MB系统RAM和800MHZ Pentium III CPU。
你可以在sun的官方网站免费下载。
WTK2.2 下载链接:http://java.sun.com WTK是Sun提供的一个开发工具包。目前各大手机厂商往往把WTK经过自身的简化与改装,推出适合自身产品,如SonyEricsson,Nokia Developer’s suit等,都属于此种类型;而通过JBuilder, Eclipse等IDE,J2ME开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。
2  J2ME WTK的内容和目录结构
2.1 安装过程
在说明WTK文件结构之前,让我们首先把它安装起来。
WTK的安装程序与普通程序一样简单,只有一点需要注意,由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK(我们这里选用的是JDK1.4.2)。
WTK会首先自动检测当前系统已有的Java虚拟机:

然后显示出当前虚拟机所在路径

您在确定无误后,就可以继续了,最后安装成功后,您将得到一个包括多种实用工具的开发包。以下是安装显示的菜单项。


2.2 目录结构
无论哪个版本的WTK都会包括以下几个目录:
appdb目录: RMS数据库信息
apps目录:  WTK自带的demo程序
bin目录:   J2ME开发工具执行文件
docs目录:  各种帮助与说明文件
lib目录:    J2ME程序库,Jar包与控制文件
session目录:性能监控保存信息
wtklib目录: JWTK主程序与模拟器外观

WTK是用来开发MIDP的,为了让MIDlet可以顺利编译和执行,WTK必须具有CLDC和MIDP的类库,WTK可以帮助我们省去额外安装调试这些类库的时间。而不同版本的WTK包含的程序库内容是不一样的,比如说2.0中包含了midpapi.jar, wma.jar, mmapi.jar,而在2.1中则变为了cldcapi10. jar, cldcapi11.jar, midpapi10.jar, midpapi20.jar, wma.jar以及mmapi.jar;在2.2中,wma.jar又细分为wma11.jar, wma20.jar。如果您在开发中需要某个特定的jar包而当前的WTK版本又没有时,您可以简单把这个jar包拷贝如当前WTK的lib文件夹即可。
apps目录中包括了许多Demo程序,为我们演示了J2ME的一些技术实例,这些往往是很好的学习材料。

3   使用J2ME WTK创建工程
3.1 建立新项目
下面让我们用WTK来创建一个经典的Hello World程序,看看这水有多深。
在WTK的程序列表中运行KToolbar,打开WTK主界面。WTK的标题菜单简单明了的列出了这个工具包的可选功能。
单击新建项目,键入新建的项目名和启动MIDlet名,这里的项目是一个MIDlet套件,而MIDlet类名则是这个套件的入口,MIDlet文件名(也是Java文件的名字)。

产生项目以后,会出现项目的设置表,您可以选择当前目标平台,CLDC配置,以及要采用的MIDP可选包。再不需要某个库文件时,请不要选中它,以减少最后程序大小。
另外,您还可以指定MIDlet的属性,这些设置将成为JAD,即J2ME程序的描述信息文档。我们的Hello World目前不需要其它的附加设置,于是采用默认,确定之后,控制台信息提示建立成功。



WTK产生项目后,不同类型的资源有着相对固定的存放位置。Java源文件被放在apps目录下\Hello World\src下,相关程序资源文件(图片,音频)放在\Hello World\res下,应用程序库文件放在\Hello World\lib下,这在WTK中是必须注意的,即便是相对路径,也必须是在该类型目录下建立。
项目创建成功后,我们来创建一个MIDlet文件,MIDlet是J2ME项目文件的入口文件,也是必须的。在\Hello World\src目录下创建HelloWorld.java,采用默认包,注意,此时创建的java程序必须是与我们在创建项目时键入的MIDlet类名一致。
在新创建的java文件中输入代码,下文是一个简单的Form程序。
HelloWorld.java
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class HelloWorld extends MIDlet {

    Display display;
   
    public HelloWorld() {
        super();
        display = Display.getDisplay(this);
    }

    protected void startApp(){
          Form form = new Form("Hello World!");
          form.append("Welcome to J2ME world!");
        display.setCurrent(form);
    }

    protected void pauseApp() {

    }

    protected void destroyApp(boolean arg0){
        
    }
}
2010/2/7 20:28:48
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
2010/2/7 20:29:01
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
jdk
JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。
    JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。
    JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。
      JDK包含的基本组件包括:
      ·javac – 编译器,将源程序转成字节码
      ·jar – 打包工具,将相关的类文件打包成一个文件
      ·javadoc – 文档生成器,从源码注释中提取文档
      ·jdb – debugger,查错工具
2010/2/7 20:29:18
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
2010/2/7 20:29:36
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
Eclipse配置J2ME开发环境
 
第一步:Java环境配置
1、安装JDK
   
安装JDK并配置环境变量
2、验证JDK是否配置成功
    在开始->运行->cmd里面写入java和javac分别进行测试看是否成功。或者写一小的java程序进行测试。


第二步:安装eclipse


第三步:安装J2ME SDK(WTK)

  WTK提供了运行J2ME应用程序所需要的库以及模拟器等,通过它可以进行程序的编译、校验、运行。

  从http://Java.sun.com/下载j2me_wireless_toolkit-2_2-windows.exe

安装到指定路径,如:C:\WTK22

第四步:安装用Eclipse开发J2ME程序的插件

  用Eclipse开发J2ME程序的插件是eclipseme,可以从http://www.eclipseme.org/下载eclipseme.feature_1.5.0_site.zip

  打开eclipse,打开菜单help(帮助)->sofeware updates(软件更新)->find and install…(查找并安装)
  打开的界面如下图:


 点next(下一步),从new archived site…(新建已归档的站点)搜索到要安装的eclipseme.feature_1.5.0_site.zip
  打开的界面如下图:


点finish(完成)。选中eclipseme.feature_1.5.0_site.zip

 打开的界面如下图:


  点next(下一步),选中I accept the terms in the license agreement
  打开的界面如下图:


 点next(下一步),出现一个Change Location按钮,是用来改变你安装的位置的,你只要指到你的eclipse目录就行了。
  点finish(完成)。
  打开的界面如下图:

就点instal all(安装全部)。安装完成后出现一提示是、否的窗口,选是后eclipse开发环境自动重起。

  打开菜单window(窗口)->preferences(参数),左边树型结构多出了J2ME一项。则说明mclipseme插件已经成功安装。

第五步:配置EclipseMe插件


  为了使新安装的EclipseMe插件能够正常工作,需要对其进行配置。
  打开菜单window(窗口)->preferences(参数),左键J2ME项。在右边显示的视图WTK Root 中Brower(浏览)选择C:\WTK22(这是我的WTK的安装目录,换成你的)。别的为默认。

  展开J2ME,点选第一个Device Management,在右边点选Import按钮,在弹出界面的Specify search directory里面选择你的WTK目录。选择后Refresh(刷新)。
结果如下图:




  点finish(完成)。
  打开的界面如下图:




第一步:Java环境配置

    1、安装JDK
  
http://Java.sun.com/下载j2sdk-1_4_2_07-windows-i586-p.exe(我下的是这个,现在应该有新的版本了)

安装到指定路径,如:c:\j2sdk-1_4_2_07

配置环境变量:(我的电脑->属性(右键)->高级->环境变量->系统变量中配置环境变量)

java_home: c:\j2sdk-1_4_2_07
path: %java_home%\bin;(可以在path值的最前面加)
CLASSPATH: .;%java_home%\lib\tools.jar;%java_home%\lib\dt.jar

    2、验证JDK是否配置成功

  在开始->运行->cmd里面写入java和javac分别进行测试看是否成功。或者写一小的java程序进行测试。

第二步:安装eclipse

  从http://www.eclipse.org/下载eclipse-SDK-3.1-win32.zip和NLpack1-eclipse-SDK-3.1.1a-win32.zip(语言包,可以汉化) 
解压缩eclipse-SDK-3.1-win32.zip即可
解压缩NLpack1-eclipse-SDK-3.1.1a-win32.zip,会得到features和plugins两个文件夹,把里面的文件分别拷贝到eclipse中相应的目录下即可。

第三步:安装J2ME SDK(WTK)

  WTK提供了运行J2ME应用程序所需要的库以及模拟器等,通过它可以进行程序的编译、校验、运行。

  从http://Java.sun.com/下载j2me_wireless_toolkit-2_2-windows.exe

安装到指定路径,如:C:\WTK22

第四步:安装用Eclipse开发J2ME程序的插件

  用Eclipse开发J2ME程序的插件是eclipseme,可以从http://www.eclipseme.org/下载eclipseme.feature_1.5.0_site.zip

  打开eclipse,打开菜单help(帮助)->sofeware updates(软件更新)->find and install…(查找并安装)
  打开的界面如下图:



  点next(下一步),从new archived site…(新建已归档的站点)搜索到要安装的eclipseme.feature_1.5.0_site.zip
  打开的界面如下图:


  点finish(完成)。选中eclipseme.feature_1.5.0_site.zip
  打开的界面如下图:



  点next(下一步),选中I accept the terms in the license agreement
  打开的界面如下图:


  点next(下一步),出现一个Change Location按钮,是用来改变你安装的位置的,你只要指到你的eclipse目录就行了。
  点finish(完成)。
  打开的界面如下图:


  就点instal all(安装全部)。安装完成后出现一提示是、否的窗口,选是后eclipse开发环境自动重起。

  打开菜单window(窗口)->preferences(参数),左边树型结构多出了J2ME一项。则说明mclipseme插件已经成功安装。


第五步:配置EclipseMe插件


  为了使新安装的EclipseMe插件能够正常工作,需要对其进行配置。
  打开菜单window(窗口)->preferences(参数),左键J2ME项。在右边显示的视图WTK Root 中Brower(浏览)选择C:\WTK22(这是我的WTK的安装目录,换成你的)。别的为默认。

  展开J2ME,点选第一个Device Management,在右边点选Import按钮,在弹出界面的Specify search directory里面选择你的WTK目录。选择后Refresh(刷新)。
结果如下图:


  点finish(完成)。
  打开的界面如下图:



  点Apply(应用)后点OK完成。配置完成。

  至此,Eclipse配置J2ME开发环境分五步完成。

2010/2/7 20:29:56
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7
2010/2/7 20:30:10
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

http://www.forum.nokia.com/

上下载该sdk包 

安装好nokia开发包,打开eclipse——窗口——首选项——j2me——Device Mamagement——右上方导入(import)——找到nokia开发包位置(如:c:\nokia)——确定——刷新(等一回就会搜到)——点确定——确定,ok了,现在可以建立nokia工程了。

2010/2/7 20:30:42
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

j2me工具命令行攻略及常见问题解决
------------------------------------------------
wtk的工具使用eclipseme+eclipse非常方便,但是我们必需熟悉一些常用的命令行操作,以便在开发过程中出现问题时可以排除错误.例如,我今天在用wtk的模拟器通过OAT方式运行程序时,就出现了如下错误:
Warning: Running JAM, Ignoring all other options (but "-Xheapsize", and OTA flags if provided)
正在通过存储根 QwertyDevice 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
** Error installing suite (39): The JAD matches a version of a suite already installed.
Execution completed.
3653833 bytecodes executed
24 thread switches
1665 classes in the system (including system classes)
19019 dynamic objects allocated (571732 bytes)
1 garbage collections (0 bytes collected)

然后模拟器就退出了,大家注意有一行:
** Error installing suite (39): The JAD matches a version of a suite already installed.

提示相同版本的jad已经安装了,好,那改一个版本吧,修改后运行依然出错:

** Error installing suite (17): The application is an older version of one that is already installed

可见,错误很明显:因为此应用已经安装过了,使用如下命令查看安装了哪些应用:
D:\WTK2.5.1\apps\test>emulator -Xjam:list
正在通过存储根 DefaultColorPhone 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
[1]
  Name: myjm Midlet Suite
  Vendor: Midlet Suite Vendor
  Version: 2.0.0
  Storage name: #Midlet%0020#Suite%0020#Vendor_myjm%0020#Midlet%0020#Suite_
  Size: 8K
  Installed From: http://localhost:8080/ota/myjm/j2me.jad
  MIDlets:
    HelloWorldPlusMIDlet
    MyTestMIDlet
    CalendarTest
[2]
  Name: test
  Vendor: Unknown
  Version: 1.0
  Description:this is my test Midlets
  Storage name: #Unknown_test_
  Size: 6K
  Installed From: http://10.17.33.191:1260/test/bin/test.jad
  MIDlets:
    TinyMIDlet
    HelloWorldPlusMIDlet

既然这样,那换一个名称吧,OK了,运行成功!
原因找到了,那我们就可以将原来的程序删除后再安装,命令如下:
D:\WTK2.5.1\apps\test>emulator -Xjam:remove=all
正在通过存储根 DefaultColorPhone 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
Execution completed.
3693460 bytecodes executed
22 thread switches
1665 classes in the system (including system classes)
19407 dynamic objects allocated (583992 bytes)
1 garbage collections (0 bytes collected)


也可以用安装的序号删除指定的程序,如:
D:\WTK2.5.1\apps\test>emulator -Xjam:remove=1

其实,删除还可以直接在模拟器上完成,运行下 emulator -Xjam 看看就知道了.
实际上我们如果只是测试下程序,可使用这个参数,在运行后程序将会自动删除:
emulator -Xjam:transient=http://localhost:8080/ota/myjm/j2me.jad

另外,提醒大家一下,通过OAT下载的时候一定要将httpserver的MIME类型设置正确,不然模拟器会提示MIME类型不正确,正确的MIMI类型应该如下:
<mime-mapping>
<extension>jad</extension>
<mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jar</extension>
<mime-type>application/java-archive</mime-type>
</mime-mapping>

 

在运行程序时,无论是直接运行JAD,还是OAT方式,都需要将midp和midlet的版本设置正确,查看模拟器支持的版本命令如下:
D:\WTK2.5.1\apps\test>emulator -version
Sun Java(TM) Wireless Toolkit 2.5.1 for CLDC
Profile: MIDP-2.1
Configuration: CLDC-1.1
Optional: J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR179-1.0.1,JSR180-1.0.1,JSR184-1.1,JSR211-1.0,JSR226-1.0,JSR229-1.1.0,JSR234-1.0
,JSR238-1.0,JSR239-1.0,JSR75-1.0,JSR82-1.1,MMAPI-1.1,SATSA-APDU-1.0,SATSA-CRYPTO-1.0,SATSA-JCRMI-1.0,SATSA-PKI-1.0,WMA-1
.1,WMA-2.0

以上命令主要针对sun的WTK,对于其它厂商的SDK,命令格式应该类似.

----------------------------------------------
下面着重对NOKIA的s60sdk3的常见问题进行一下讨论.
在eclipseme中使用s60的sdk作为模拟器运行OAT方式时,会提示:
Failed to resolve application name
Caught exception:
java.lang.IllegalStateException:No application specified in Jad or command line
...

可见,s60的sdk是不支持OAT方式运行的.

-------------------------------------------
通过jad的方式运行吧,在eclipse提示:
java.io.FileNotFoundException
...
原来是sdk不支持这个格式的文件参数:file:\E:\,在eclispe的run配置中将"file:"去掉后可运行成功,同样在命令行下也可运行成功:
emulator -Xdescriptor:E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\j2me.jad

然后直接以class的方式运行jar中的类,在eclipse中提示:
Jar file could not be initialized
Caught exception:
java.til.zip.ZipException:invalid entry compressed size(expected 993 but got 996 bytes)
...

用以下命令行出现同样的错误:
E:\sylilzy\silyWork\mgs>emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\myjm.jar com.sily.s60.HelloWorldPlusMIDlet
可见eclipse的classs运行应该就是采用上述命令行

分析原因,可能是因为eclipse所打的jar包,在sdk中无法被解压导致,但是为什么采用jad方式运行时可以正确读取jar包中的类呢,无可得知...
但是,在eclipse中create package后,再create obfuscated package后,再通过命令行运行:
emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\myjm.jar com.sily.s60.HelloWorldPlusMIDlet

则是OK的,是因为proguard3.9对原myjm.jar包作了修改,反而可以正常运行了 : )

--------------------------------------------------
那现在直接运行class目录中的class会怎样呢,如下:
E:\sylilzy\silyWork\mgs>emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\bin com.sily.s60.HelloWorldPlusMIDlet
java.lang.Error: ClassFormatError: Inconsistent or missing stackmap at target
 - java.lang.Class.invoke_verify(), bci=0
 - java.lang.Class.initialize(), bci=117
 - java.lang.Class.forName(), bci=0
 - com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=43
Uncaught exception: java.lang.RuntimeException: java.lang.Error: ClassFormatError: Inconsistent or missing stackmap at t
arget
 - com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=183
-VM verbose connection exited

提示ClassFormatError,应该和编译器有关,换SUN WTK编译试试,一样.但是,运行另外一个程序却可以通过:
emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\bin com.sily.j2me.MyTestMIDlet
the program is running...
-VM verbose connection exited

------------------------------------------------------
综上所述,可见nokia的sdk在与eclipseme的兼容上还存在一些问题,也就是说在eclipse3.2+eclipseme1.7+nS60_jme_sdk_3rd_e的环境下,想在eclipse下正常运行midlet程序是不可能的,需要手工修改一些配置,或者通过命令行的方式才可将程序正确地运行起来.

 


文章来源:http://blog.sina.com.cn/s/blog_3ca49af3010009ev.html
2010/2/7 20:30:55
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

j2me工具命令行攻略及常见问题解决
------------------------------------------------
wtk的工具使用eclipseme+eclipse非常方便,但是我们必需熟悉一些常用的命令行操作,以便在开发过程中出现问题时可以排除错误.例如,我今天在用wtk的模拟器通过OAT方式运行程序时,就出现了如下错误:
Warning: Running JAM, Ignoring all other options (but "-Xheapsize", and OTA flags if provided)
正在通过存储根 QwertyDevice 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
** Error installing suite (39): The JAD matches a version of a suite already installed.
Execution completed.
3653833 bytecodes executed
24 thread switches
1665 classes in the system (including system classes)
19019 dynamic objects allocated (571732 bytes)
1 garbage collections (0 bytes collected)

然后模拟器就退出了,大家注意有一行:
** Error installing suite (39): The JAD matches a version of a suite already installed.

提示相同版本的jad已经安装了,好,那改一个版本吧,修改后运行依然出错:

** Error installing suite (17): The application is an older version of one that is already installed

可见,错误很明显:因为此应用已经安装过了,使用如下命令查看安装了哪些应用:
D:\WTK2.5.1\apps\test>emulator -Xjam:list
正在通过存储根 DefaultColorPhone 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
[1]
  Name: myjm Midlet Suite
  Vendor: Midlet Suite Vendor
  Version: 2.0.0
  Storage name: #Midlet%0020#Suite%0020#Vendor_myjm%0020#Midlet%0020#Suite_
  Size: 8K
  Installed From: http://localhost:8080/ota/myjm/j2me.jad
  MIDlets:
    HelloWorldPlusMIDlet
    MyTestMIDlet
    CalendarTest
[2]
  Name: test
  Vendor: Unknown
  Version: 1.0
  Description:this is my test Midlets
  Storage name: #Unknown_test_
  Size: 6K
  Installed From: http://10.17.33.191:1260/test/bin/test.jad
  MIDlets:
    TinyMIDlet
    HelloWorldPlusMIDlet

既然这样,那换一个名称吧,OK了,运行成功!
原因找到了,那我们就可以将原来的程序删除后再安装,命令如下:
D:\WTK2.5.1\apps\test>emulator -Xjam:remove=all
正在通过存储根 DefaultColorPhone 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
Execution completed.
3693460 bytecodes executed
22 thread switches
1665 classes in the system (including system classes)
19407 dynamic objects allocated (583992 bytes)
1 garbage collections (0 bytes collected)


也可以用安装的序号删除指定的程序,如:
D:\WTK2.5.1\apps\test>emulator -Xjam:remove=1

其实,删除还可以直接在模拟器上完成,运行下 emulator -Xjam 看看就知道了.
实际上我们如果只是测试下程序,可使用这个参数,在运行后程序将会自动删除:
emulator -Xjam:transient=http://localhost:8080/ota/myjm/j2me.jad

另外,提醒大家一下,通过OAT下载的时候一定要将httpserver的MIME类型设置正确,不然模拟器会提示MIME类型不正确,正确的MIMI类型应该如下:
<mime-mapping>
<extension>jad</extension>
<mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jar</extension>
<mime-type>application/java-archive</mime-type>
</mime-mapping>

 

在运行程序时,无论是直接运行JAD,还是OAT方式,都需要将midp和midlet的版本设置正确,查看模拟器支持的版本命令如下:
D:\WTK2.5.1\apps\test>emulator -version
Sun Java(TM) Wireless Toolkit 2.5.1 for CLDC
Profile: MIDP-2.1
Configuration: CLDC-1.1
Optional: J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR179-1.0.1,JSR180-1.0.1,JSR184-1.1,JSR211-1.0,JSR226-1.0,JSR229-1.1.0,JSR234-1.0
,JSR238-1.0,JSR239-1.0,JSR75-1.0,JSR82-1.1,MMAPI-1.1,SATSA-APDU-1.0,SATSA-CRYPTO-1.0,SATSA-JCRMI-1.0,SATSA-PKI-1.0,WMA-1
.1,WMA-2.0

以上命令主要针对sun的WTK,对于其它厂商的SDK,命令格式应该类似.

----------------------------------------------
下面着重对NOKIA的s60sdk3的常见问题进行一下讨论.
在eclipseme中使用s60的sdk作为模拟器运行OAT方式时,会提示:
Failed to resolve application name
Caught exception:
java.lang.IllegalStateException:No application specified in Jad or command line
...

可见,s60的sdk是不支持OAT方式运行的.

-------------------------------------------
通过jad的方式运行吧,在eclipse提示:
java.io.FileNotFoundException
...
原来是sdk不支持这个格式的文件参数:file:\E:\,在eclispe的run配置中将"file:"去掉后可运行成功,同样在命令行下也可运行成功:
emulator -Xdescriptor:E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\j2me.jad

然后直接以class的方式运行jar中的类,在eclipse中提示:
Jar file could not be initialized
Caught exception:
java.til.zip.ZipException:invalid entry compressed size(expected 993 but got 996 bytes)
...

用以下命令行出现同样的错误:
E:\sylilzy\silyWork\mgs>emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\myjm.jar com.sily.s60.HelloWorldPlusMIDlet
可见eclipse的classs运行应该就是采用上述命令行

分析原因,可能是因为eclipse所打的jar包,在sdk中无法被解压导致,但是为什么采用jad方式运行时可以正确读取jar包中的类呢,无可得知...
但是,在eclipse中create package后,再create obfuscated package后,再通过命令行运行:
emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\myjm.jar com.sily.s60.HelloWorldPlusMIDlet

则是OK的,是因为proguard3.9对原myjm.jar包作了修改,反而可以正常运行了 : )

--------------------------------------------------
那现在直接运行class目录中的class会怎样呢,如下:
E:\sylilzy\silyWork\mgs>emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\bin com.sily.s60.HelloWorldPlusMIDlet
java.lang.Error: ClassFormatError: Inconsistent or missing stackmap at target
 - java.lang.Class.invoke_verify(), bci=0
 - java.lang.Class.initialize(), bci=117
 - java.lang.Class.forName(), bci=0
 - com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=43
Uncaught exception: java.lang.RuntimeException: java.lang.Error: ClassFormatError: Inconsistent or missing stackmap at t
arget
 - com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=183
-VM verbose connection exited

提示ClassFormatError,应该和编译器有关,换SUN WTK编译试试,一样.但是,运行另外一个程序却可以通过:
emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\bin com.sily.j2me.MyTestMIDlet
the program is running...
-VM verbose connection exited

------------------------------------------------------
综上所述,可见nokia的sdk在与eclipseme的兼容上还存在一些问题,也就是说在eclipse3.2+eclipseme1.7+nS60_jme_sdk_3rd_e的环境下,想在eclipse下正常运行midlet程序是不可能的,需要手工修改一些配置,或者通过命令行的方式才可将程序正确地运行起来.

 


文章来源:http://blog.sina.com.cn/s/blog_3ca49af3010009ev.html
2010/2/7 20:31:10
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

各种J2ME开发工具的地址 Netbeans 非常不错的一款开源软件,安装Mobility Pack后就可以开发J2ME应用 地址:http://www.netbeans.org

Eclipse IBM的力作,也是免费的。需要安装eclipseME插件 地址分别是http://eclipse.orghttp://eclipseme.org

JBuilder 太大了,不推荐下载。

CodeWarrior 我没有用过,不过听介绍过可以用来开发Palm等应用,和motorola sdk集成的不错。地址http://www.metrowerks.com/mw/default.htm

WTK 一般开发者都要用到的,地址http://java.sun.com

2010/2/7 20:31:25
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

J2ME游戏程序如何打包成JAR格式?(

用wtk就可以直接编译,打包成jar文件,然后在wtk模拟器上运行
1)安装wtk
2)启动 开始——程序——j2me witness toolkit——ktoolbar
3)new project ,然后为你的项目取名称
4)然后把你的java文件复制到wtk安装目录\\apps目录下\\你建立的目录\\src目录下
5)点wtk上的build,就可以把你的程序编译,并打包到wtk安装目录\\apps目录下\\你建立的目录\\bin目录下,一共产生两个文件,一个是jar文件,一个是jad文件(路径配置文件)
6)点wtk上的run可以直接在模拟器上运行

2010/2/7 20:31:44
piaoling






角  色:管理员
等  级:旅长
发 帖 数:672
经 验 值:2001
注册时间:2008/12/7

Wireless Toolkit(WTK)。

J2ME新手最常使用的开发工具Wireless Toolkit(WTK)。WTK 的全称是Sun J2ME Wireless Toolkit —— Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。

  WTK是Sun提供的一个开发工具包。目前各大手机厂商往往把WTK经过自身的简化与改装,推出适合自身产品,如SonyEricsson,Nokia Developer’s suit等,都属于此种类型;而通过JBuilder, Eclipse等IDE,J2ME开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。

1.1安装过程

WTK的安装程序与普通程序一样简单,只有一点需要注意,由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK(我们这里选用的是JDK1.4.2)。JDK的安装比较简单,和普通程序的安装一样,读者可以从附带的光盘中找到JDK1.4.2进行安装,不需要进行特殊设置。

JDK安装成功后,接下来我们安装WTK。WTK会首先自动检测当前系统已有的Java虚拟机:

然后显示出当前虚拟机所在路径

您在确定无误后,就可以继续了,最后安装成功后,您将得到一个包括多种实用工具的开发包。以下是安装显示的菜单项。

1.2执行MIDlet、打包和混淆

1.2.1执行MIDlet

除了在KToolbar中执行一个程序,我们还可以在程序组中直接选择Run MIDP Application…, 这是就可以在弹出的对话框中选择其它路径中的JAD程序运行了。

*当我们直接选择运行时,需要注意两个问题:

1.     JAD描述文件与其指定的JAR文件在同一个目录下。

2.     运行目录路径中不要包含中文。

1.2.2打包成JAR

KToolbar的生成功能只能帮我们将源代码编译并预先审核,并不会帮我们产生JAR文件,而我们如果要发布MIDP程序,除了JAD描述文件,JAR是必须的,这就需要打包。

在KToolbar选中项目 —— 包 —— 产生包,可以把整个程序,包括资源文件打包成JAR文件。形成的JAR保存在apps\项目名称\bin目录下。

1.2.3包混淆

所谓混淆,是为了防止别人反编译后读取源代码,将程序(.class文件)进行混淆,经过混淆的Java Byte Code可以增加别人反编译的时间。

把ProGuard解压,在解压目录的lib子目录中找到proguard.jar文件,将其拷贝到WTK安装目录的bin下,再执行混淆包。这是我们将会发现apps\项目名称\bin下的JAR大小变小了,反编译后的各个名称也变得毫无意义了。

1.3使用WTK创建工程

1.3.1 建立新项目

下面让我们用WTK来创建第一个HelloWord程序,熟悉下WTK开发的流程。

在WTK的程序列表中运行KToolbar,打开WTK主界面。WTK的标题菜单简单明了的列出了这个工具包的可选功能。

单击新建项目,键入新建的项目名和启动MIDlet名,这里的项目是一个MIDlet套件,而MIDlet类名则是这个套件的入口,MIDlet文件名(也是Java文件的名字)。

产生项目以后,会出现项目的设置表,您可以选择当前目标平台,CLDC配置,以及要采用的MIDP可选包。再不需要某个库文件时,请不要选中它,以减少最后程序大小。

另外,您还可以指定MIDlet的属性,这些设置将成为JAD,即J2ME程序的描述信息文档。我们的Hello World目前不需要其它的附加设置,于是采用默认,确定之后,控制台信息提示建立成功。

 

WTK产生项目后,不同类型的资源有着相对固定的存放位置。Java源文件被放在apps目录下\Hello World\src下,相关程序资源文件(图片,音频)放在\Hello World\res下,应用程序库文件放在\Hello World\lib下,这在WTK中是必须注意的,即便是相对路径,也必须是在该类型目录下建立。

项目创建成功后,我们来创建一个MIDlet文件,MIDlet是J2ME项目文件的入口文件,也是必须的。在\Hello World\src目录下创建HelloWorld.java,采用默认包,注意,此时创建的java程序必须是与我们在创建项目时键入的MIDlet类名一致。

在新创建的java文件中输入代码,下文是一个简单的Form程序。

HelloWorld.java

import javax.microedition.lcdui.*;

import javax.microedition.midlet.MIDlet;

public class HelloWorld extends MIDlet {

Display display;

public HelloWorld() {

super();

display = Display.getDisplay(this);

}

protected void startApp(){

Form form = new Form("Hello World!");

form.append("Welcome to J2ME world!");

display.setCurrent(form);

}

protected void pauseApp() {

}

protected void destroyApp(boolean arg0){

}

}

完成后保存java文件,单击“生成”按钮,由WTK为您进行编译,如果有错误生成,则会在控制台中提示。

根据提示信息对MIDlet文件进行修改,再重新生成,直到编译成功。对编译成功的程序,你可以从“设备”选项中选择DefaultColorPhone,DefaultGrayPhone或者其它WTK自带的设备模拟器,单击按钮可以看到弹出一个手机模拟器,显示出我们的第一个Hello World程序,如果执行有错,依然会在控制台中给出提示信息。

运行成功以后,在HelloWorld/bin目录下,将会产生一个程序描述文档JAD,它清楚的描述了当前MIDlet的名称与版本,发行人,指定的JAR包名称与大小,支持CLDC与MIDP版本等信息。在进阶开发中,默认的联网字符串,签名私钥等信息也可以保存在这个描述文档中。

1.3.2 开启旧项目

当我们下一次重新启动WTK的时候,选择打开项目,WTK会把自身apps目录下的应用项目全部显示出来,包括我们刚刚建立的Hello World,选择“打开项目”后,就能够对apps目录下的MIDlet项目进行开发更改了。

1.4 配置其他厂商的模拟器到wtk中

  实际开发中,有时候标准wtk中的模拟器并不能满足我们的需要,这时候就需要其他厂商的模拟器的支持,如何将其他厂商的模拟器导入到wtk中呢,方法很简单:

1.4.1 配置nokia模拟器到wtk中

  开发中用的最多的就是nokia的模拟器。首先我们下载nokia的wtk安装程序,按照默认设置安装nokia的wtk,安装完成后,假如我们安装到c盘目录下,那么我们会在安装目录下看到一个devices目录,该目录下列出了所有提供的nokia模拟器,拷贝自己需要的模拟器文件夹到\WTK22\wtklib\devices下既可使wtk集成nokia的模拟器,重启标准wtk,随便打开一个应用,我们会在下拉列表中看到我们添加进来的nokia模拟器,如图所示:  

1.4.2 配置其他厂商的模拟器到wtk中

    也许我们要做游戏移植,或者为其他厂商的手机做游戏,比如索尼爱立信等,我们也可以在这些厂商的wtk中找到devices目录,将我们需要的模拟器拷贝到标准wtk下,使标准的wtk支持其他厂商的模拟器,有兴趣的大家可以自己尝试,如果有问题可以到本站论坛交流。

到此为止,我们wtk开发环境的搭建已经完成,可能大家觉得wtk的程序编写能力不太强,想使用主流的开发工具eclipse或者jbuilder、netbean等开发,下面我们就一一给大家介绍下这些开发工具如何配置使之可以支持手机游戏的开发

返回页首↑


津ICP备09000164号

联系我们 - piaoling Corporation - 论坛存档 - 返回顶端
Powered by BBSXP 2007 ACCESS © 1998-2025
Server Time 2025/1/13 17:38:17
Processed in 0.06 second(s)
飘凌大杂烩