用Eclipse开发J2ME手机游戏 第五讲 J2ME应用程序的仿真机发布

本文通过开发“整蛊专家”程序,介绍J2ME手机应用开发过程,包括信息框显示、命令按钮添加及响应等功能,最终实现能在真机运行的应用。
  引言

  在上一篇文章介绍了HelloWorld程序的开发过程,虽然这是一个经典的程序但并不具备任何实质性的功能而且只是在模拟器中仿真运行。经过这么长时间的学习,本文中要向读者在这段时间的学习有所交代,最起码应当让读者能够开发出一个具备简单功能的能够在真机运行的J2ME手机应用程序,也好以此向周围的同学、同事炫耀一番。相信赢得些许羡慕的目光应该不是什么难事。好了,闲话暂且不提,先简单介绍一下本文将要介绍的知识点。

  本文将通过一个简单的J2ME程序"整蛊专家"的开发向读者介绍信息框的显示、命令按钮的添加、通过文本框与用户的交互、对命令按钮的响应以及对所开发应用程序的打包发布等主要内容。最终展现给读者的将是一个能够在真机运行的J2ME手机程序。

  程序的设计

  首先,按照上一篇文章介绍的知识创建J2ME项目Test并添加MIDlet到其中。现在就在EclipseMe生成的框架代码基础上将下面阴影显示的功能代码添加到相应位置:

package demo;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class Test extends MIDlet implements CommandListener {
 private TextBox textbox; // Textbox 显示一条消息
 private Display disp; // 引用MIDlet的Display 对象
 private Command cmdExit; // 设定按钮用于退出MIDlet
 private Command cmdOK; // 确定按钮
 private Alert alt; // 信息提示对象
 public Test() {
  super();
  disp = Display.getDisplay(this); // 获得当前MIDlet的Display对象
  cmdExit = new Command("退出", Command.SCREEN, 1); // 新建两个控制按钮
  cmdOK = new Command("阅读", Command.OK, 1);
  textbox = new TextBox("请输入待阅项目序号:", "", 40, 0); // 新建文本框
  textbox.addCommand(cmdExit); // 添加控制按钮
  textbox.addCommand(cmdOK);
  textbox.setCommandListener(this); // 开始侦听命令
 }
 protected void startApp() throws MIDletStateChangeException {
  alt = new Alert("整蛊专家 V1.0");// 开始运行时显示版权信息,新建信息框对象
  // 设置显示字符串
  alt.setString("==== 整蛊专家 V1.0 ====郎锐2004年作版权所有(C) 2004-2005");
  alt.setType(AlertType.INFO); // 设置为普通阅读信息框
  alt.setTimeout(Alert.FOREVER); // 信息窗口在按下DONE键后才能进入下一页面
  disp.setCurrent(alt, textbox); // 显示信息窗口
 }
 protected void pauseApp() {}
 protected void destroyApp(boolean arg0){}
 public void commandAction(Command arg0, Displayable arg1)
 {
  if (arg0 == cmdExit) { // 按下退出键时停止运行
   destroyApp(false);
   notifyDestroyed();
  }
  if (arg0 == cmdOK) { // 按下阅读键后阅读对应信息
   TextBox textbox = (TextBox)arg1; // 得到用户输入的内容
   String sInfo = textbox.getString();
   if (sInfo.equals("1") || sInfo.equals("2") || sInfo.equals("3") || sInfo.equals("4") || sInfo.equals("5")) { // 显示项目1的内容
    // 根据所选项目选择要显示的内容
    if (sInfo.equals("1")) alt.setString("一兄弟脾气甚……");
    if (sInfo.equals("2")) alt.setString("猪的四大愿望……");
    if (sInfo.equals("3")) alt.setString("春风里,百花下……");
    if (sInfo.equals("4")) alt.setString("为什么……");
    if (sInfo.equals("5")) alt.setString("昨夜做了……");
    alt.setTitle("您正在阅读短信" + sInfo); // 设置标题
   }else{
    alt.setString("很抱歉,暂时还没有您选择的项目,请重新输入!");
    alt.setTitle("错误警告"); // 设置标题
   }
   alt.setType(AlertType.INFO); // 设置为普通阅读信息框
   alt.setTimeout(Alert.FOREVER); // 信息窗口在按下DONE键后进入下一页面
   disp.setCurrent(alt, textbox); // 显示信息窗口
  }
 }
}

  在讲述这段代码之前首先介绍一下MIDlet的生命周期:一个MIDlet在其生命周期中共有三种状态,分别是暂停、活动和停止。MIDlet被加载后首先是处于暂停状态,在J2ME调用startApp()方法后转入活动状态。通常情况下应用程序是不必考虑如何控制其运行状态的,其状态的切换由手机来决定。例如,在程序运行过程中如果有电话呼入则会自动转入暂停状态而无须在与用户交互后才能做出判断。最后,当用户按下手机的取消键时,MIDlet将进入停止状态。

  在Test类的构造函数中首先得到当前MIDlet的Display对象,以便进行界面显示。随后通过new操作符新建项目将要用到的命令按钮、文本框等高级用户界面类的对象。在创建命令按钮时,可以通过参数指定所要创建的命令按钮种类。在TextBox类方法addCommand()将其添加到文本框后需要继续调用setCommandListener()方法以开始命令的侦听,否则创建出来的命令按钮仅仅是个无法响应任何操作的摆设。由于需要处理按键,因此在这里必须实现CommandListener接口并处理commandAction方法,该方法的具体实现过程稍后在进行介绍。

  为了在程序开始之初启动程序封面,以显示版权信息、软件介绍等简介性质的文字或画面,需要在startApp()方法中添加相应的代码。这里是通过信息框来实现这一功能的。首先新建一Alert对象,并设置标题、内容信息和信息框类型。通常我们更习惯在按键之后再进入下一页面,为了实现这一效果可以在调用setTimeout()方法时指定FOREVER这一属性参数。设置完毕后通过Display的setCurrent()方法指定该信息框为当前显示界面。

  本程序具有用户交互功能,用户可以通过输入要查看短信的序号来阅读不同的短信内容。为实现该功能就要在commandAction()方法中添加代码进行处理。由于本程序添加有两种不同功能的按键,因此首先需要对第一个参数进行检查以区分当前执行的是退出命令还是确定命令。如果按下的是后者,再通过第二个参数得到用户通过键盘在文本框录入的字符并进行检测判断,对于习惯了C++编程的开发人员需要注意,在判断字符变量是否与其他字符相等时不能使用"=="操作符而要使用String的equals()方法进行判断。剩下的工作就是再以信息框将用户需要的短信显示出来即可,具体实现过程与前述方法类似。


  Eclipse在代码编写过程中会动态检查错误,在出现错误后,可以将鼠标移到在出错代码左侧的错误图标上双击鼠标,将弹出如上图所示的更改建议,用户可以在其上双击鼠标接受其建议,在右侧浮动窗口显示的代码将自动添加到适当的位置。

    运行程序并打包

  代码编写无误后可以先在PC上的模拟器中运行调试,并对出现的问题进行修改,一切无误后再打包发布。在模拟器的运行过程在上一篇文章已有详细介绍,这里就不再重复。由于程序即将在真机运行,因此最好使用手机厂商提供的J2ME SDK。下图为使用SonyErisson J2ME SDK (WTK 1.0.4)和SonyErission_T630模拟器的运行过程截图:


  在程序列表中选中本程序Test,然后按下Lautch键将装载程序并进入软件首页(左2图),按下Done键进入用户交互界面(左3图)通过点击模拟器的数字按键录入要查看的短信序号并按下"阅读"键将显示相应短信内容(左4图)按下Done键后返回到前一页面,可以再次输入其他短信序号继续阅读其他短信的内容,直到按下"退出"键返回到最开始的界面(左1图)。


  显然,编写的程序并没有什么问题,可以向真机发布了。在发布时,首先要确保已经添加有对MIDlet的定义。可以在导航器视图中双击"Test.jad"项打开jad编辑器(见上图)。在编辑器下方窗口切换中选择Midlets进入Midlet定义窗体,确保有如上图所示的项目出现,否则添加之。如果需要添加图标的话,可以指定待使用的图标,但一定要预先将图标文件转换成png格式的文件。




  最后要进行的应用程序打包处理简单的几乎难以置信,只需右击项目并选择上下文菜单的"J2ME"菜单所弹出的"Create Package"菜单项即可(见上图)。EclipseMe将自动在项目存放目录下的deployed文件夹下生成两个文件,分别是Test.jad和Test.jar。只要通过手机上传软件经由数据线、红外口或是蓝牙将Test.jar上传至手机即可。当然,手机必须是支持Java的才行。如果不清楚是否支持,可查阅手机用户手册。

  小结

  到此为止,已经实现了一个真正能够在手机运行的J2ME程序。虽然最后完成的"整蛊专家"程序功能仍然有限,但是读者可以发现我们开发出来的软件与下载得到的各种Java手机程序并没有本质的差别。通过对其开发过程的剖析可以发现J2ME程序的开发并没有原先想象的那么神秘与高深。只要投入更多的精力和创意,不难写出功能更强大、界面更美观的J2ME程序。目前做到的是J2ME程序的突破,今后需要做的是不断的提高。在下一篇文章,也就是本系列文章的最后一篇文章,将在此基础上实现一个图形化的手机游戏程序。

From: http://www.yesky.com/SoftChannel/72342371878043648/20050409/1933381_1.shtml


内容概要:本文详细介绍了“考虑N-1故障集的电力系统安全约束经济调度(SCED)”的Matlab代码实现方案,聚焦于电力系统在满足N-1安全准则(即任一元件故障后系统仍能安全运行)条件下的经济性与安全性协同优化问题。资源通过构建精确的数学优化模型,在兼顾发电成本最小化的同时,确保系统在故障前后的运行安全性,涵盖潮流约束、机组出力限制及故障后安全恢复等多重约束条件。文中提供了完整的Matlab仿真代码,并集成YALMIP工具包进行高效求解,支持高水平学术研究的模型复现与结果验证,尤其适用于EI期刊、博士论文等科研场景。此外,资源附带详细的网盘链接,便于获取YALMIP开发包及其他配套材料,极大提升了科研复现效率。; 适合人群:具备电力系统分析、优化建模理论基础,熟悉Matlab编程语言,正在从事电力系统经济调度、安全稳定分析、新能源接入影响研究等相关方向的研究生、高校科研人员及电力行业工程技术开发者。; 使用场景及目标:① 深入学习并复现N-1安全约束下的SCED建模方法;② 掌握基于YALMIP与Matlab的优化问题建模与求解流程;③ 支撑高水平学术论文(如EI、SCI、博士论文)的仿真验证与结果再现;④ 为含高比例新能源接入的现代电力系统安全经济运行研究提供可扩展的技术框架与代码基础。; 阅读建议:建议结合文中提供的百度网盘资源与公众号“荔枝科研社”的配套资料,按照推荐目录顺序系统学习,重点关注模型构建的数学逻辑与代码实现细节,动手调试参数并尝试引入新能源不确定性、多故障场景(N-k)或分布鲁棒优化等前沿方向以拓展研究深度。
内容概要:本文围绕面向光储充一体化社区的电动汽车有序充电双层优化策略展开研究,提出了一种结合上层系统优化与下层用户优化的协同调度模型。上层以削峰填谷、降低电网购电成本为目标,优化光储系统与电动汽车的整体充放电行为;下层则聚焦于最小化用户个体充电费用,提升用户参与积极性。通过Matlab平台实现模型求解,融合智能优化算法对光伏发电的随机性、负荷波动及用户充电需求多样性进行建模与协同调度,有效提升了可再生能源的就地消纳能力,减小了电网峰谷差。研究还引入虚拟储能、需求响应等机制,增强了系统的灵活性与经济性,为社区级综合能源系统的优化运行提供了理论依据与技术路径。; 适合人群:具备电力系统分析、优化建模及Matlab编程基础的科研人员,尤其适用于从事微电网、综合能源系统、电动汽车调度、需求响应等领域研究的研究生、高校教师及工程技术人员。; 使用场景及目标:①应用于光储充一体化社区能量管理系统的设计与运行优化;②为实现电动汽车有序充电、提升分布式能源利用率、降低电网运行压力提供解决方案;③服务于双层优化模型的学习与复现,深化对主从博弈、分布式优化等高级建模方法的理解与应用。; 阅读建议:建议读者结合提供的Matlab代码深入剖析模型构建细节,重点关注上下层目标函数的耦合关系、约束条件的数学表达以及求解算法的实现流程,同时可参考文中涉及的智能优化算法与其他综合能源案例,拓展实际科研与工程应用思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值