Kuix 错误处理机制

Kuix 错误处理机制

        最近在做手机软件,暂时选定 JavaME 作为开发语言,而 Kuix 作为界面开发框架。总体来说,使用 Kuix 做出来的界面还是很漂亮的,兼容性也不错。项目进入收尾阶段,发现错误处理还没有做。一旦抛出异常,就把异常信息赤裸裸地展示给用户了。比如我写的一个类 com.defonds.frame.BusTravelProgram 里抛出了空指针异常,当前页面就会有一个提示框,内容可能是“com.defonds.frame.BusTravelProgram$1@698d1af:java.lang.NullPointerException”,如下图所示。这显然是不能容忍的。可惜的是,关于 Kuix 的中文资料很少,而关于 Kuix 框架的错误处理的中文资料更是少之又少。于是作者不得不去“造轮子”,自己看 Kuix 源码、查国外英文资料、结合自己错误处理经验,总结了这一篇“Kuix 错误处理机制”,只为了方便更多的 Kuix 爱好者。其中的观点肯定有错误或者不足之处,敬请各位批评指正。

Kuix 错误处理机制_第1张图片
        记得一位企业家说过:“我去参观别的公司,衡量这个公司文化的标准就看两个地方:一个是食堂,另一个是厕所。”。作者非常认同这个观点。同样,任何优秀的软件,它拥有的应该不仅仅是华丽的外表、强大的功能,还应该有对错误处理的支持。Kuix 框架也有它自己的错误处理机制。
        限于篇幅和时间,作者在这里仅仅把如何在项目中使用 Kuix 的错误处理机制。关于更多 Kuix 错误处理机制的深入研究,请参考 Kuix 的官方文档和相关源码。Kuix 是一个开源、免费的作品,文档和源码并不难找。
        第一步:写一个异常处理器,司责出现错误后进行的操作。
        这个要实现 org.kalmeo.util.worker.WorkerErrorListener,在 onWorkerError 对程序中抛出的错误进行捕捉并处理,在 onWorkerException 方法里对程序中抛出的异常进行捕捉并处理。源代码如下:
/** * 文件名:KuixExceptionHandler.java * * 版本信息: * 日期:2010-1-14 * Copyright XXX Corporation 2010 * 版权所有 * */ package com.defonds.util; import org.kalmeo.kuix.core.Kuix; import org.kalmeo.util.worker.WorkerErrorListener; import org.kalmeo.util.worker.WorkerTask; import com.defonds.frame.ExceptionFrame; /** * * 项目名称:BusTravel * 类名称:KuixExceptionHandler * 类描述:项目异常处理器类 * 创建人:Defonds * 创建时间:2010-1-14 上午10:38:04 * 修改人:Defonds * 修改时间:2010-1-14 上午10:38:04 * 修改备注: * @version * */ public class KuixExceptionHandler implements WorkerErrorListener { /** * 创建一个新的实例 KuixExceptionHandler. * */ public KuixExceptionHandler() { System.out.println("Kuix 错误处理器就绪。。。"); } /** * 实现 org.kalmeo.util.worker.WorkerErrorListener 的 onWorkerError 方法 * 对程序中抛出的错误进行捕捉处理 */ public void onWorkerError(WorkerTask task, Error error) { /** * 这里对所有错误进行统一处理,你也可以针对不同类型的错误进行不同处理 */ ExceptionFrame mf = new ExceptionFrame(); Kuix.getFrameHandler().removeAllFrames(); Kuix.getFrameHandler().pushFrame(mf); mf = null; } /** * 实现 org.kalmeo.util.worker.WorkerErrorListener 的 onWorkerException 方法 * 对程序中的抛出的异常进行捕捉处理 */ public void onWorkerException(WorkerTask task, Exception exception) { /** * 这里对所有异常进行统一处理,你也可以针对不同类型的异常进行不同处理 */ ExceptionFrame mf = new ExceptionFrame(); Kuix.getFrameHandler().removeAllFrames(); Kuix.getFrameHandler().pushFrame(mf); mf = null; } }
        第二步:在一个程序启动后必定被加载的类中(一般就是程序入口了,即 KuixMIDlet 类中)加入一个错误处理器的实例变量:
/** * 错误处理器就绪 */ private KuixExceptionHandler kuixExceptionHandler = new KuixExceptionHandler();
        然后再在这个类加载时必定走的方法中加入以下代码(作者写在了继承了 KuixMIDlet 的类的 initDesktopContent 方法中:
/* * 载入 WelcomeFrame */ public void initDesktopContent(Desktop desktop) { WelcomeFrame wf = new WelcomeFrame(); Kuix.getFrameHandler().pushFrame(wf); Worker.instance.setWorkerErrorListener(kuixExceptionHandler); }
        最后写一个出现错误后的提示界面,代码如下所示:
/** * 文件名:ExceptionFrame.java * * 版本信息: * 日期:2010-1-14 * Copyright XXX Corporation 2010 * 版权所有 * */ package com.defonds.frame; import org.kalmeo.kuix.core.Kuix; import org.kalmeo.kuix.core.KuixConstants; import org.kalmeo.kuix.widget.Screen; import org.kalmeo.util.frame.Frame; import com.defonds.util.Tools; /** * * 项目名称:BusTravel * 类名称:ExceptionFrame * 类描述:异常处理界面 * 创建人:Defonds * 创建时间:2010-1-14 上午11:33:01 * 修改人:Defonds * 修改时间:2010-1-14 上午11:33:01 * 修改备注: * @version * */ public class ExceptionFrame implements Frame { /** * 设置显示内容 */ private Screen screen = null; /** * 拼成的 xml 结果字符串 */ private StringBuffer stringBuffer = new StringBuffer(); /** * 创建一个新的实例 ExceptionFrame. * */ public ExceptionFrame() { this.stringBuffer.append("<screen title='出错啦!' style="transition:slide(left);" mce_style="transition:slide(left);">") .append("<scrollpane id='group' style="bg-color:white" mce_style="bg-color:white">") .append("<container style="layout:inlinelayout(true,bottom);padding:3 0 5 15;bg-color:white;bg-image:url(bgg_06.png)" mce_style="layout:inlinelayout(true,bottom);padding:3 0 5 15;bg-color:white;bg-image:url(bgg_06.png)">") .append("<text>对不起,出错啦!</text>") .append("</container>") .append("</scrollpane>") .append("<screenFirstMenu onAction='confirm(#group.focusedwidget.id,#group.focusedwidget.tag)'> 主 页</screenFirstMenu>") .append("<screenSecondMenu onAction='exit'>退 出</screenSecondMenu>") .append("</screen>"); } /** * 实现 Frame 的 onAdded 方法 */ public void onAdded() { screen = Kuix.loadScreen(Tools.StrToIs(this.stringBuffer.toString()),null); screen.setCurrent(); } /** * 实现 Frame 的 onMessage 方法 */ public boolean onMessage(Object identifier, Object[] arguments) { if ("exit".equals(identifier)){ Kuix.alert("确认退出?", KuixConstants.ALERT_YES | KuixConstants.ALERT_NO, "doexit", null); }else{ MainPageFrame mf = new MainPageFrame(); Kuix.getFrameHandler().removeAllFrames(); Kuix.getFrameHandler().pushFrame(mf); mf = null; } return false; } /** * 实现 Frame 的 onRemoved 方法 */ public void onRemoved() {} }
        这样就可以了。下面是作者异常处理页面。作者美工底子比较差,这篇例子只演示功能实现。读者可以自行设计界面。

Kuix 错误处理机制_第2张图片

        技术交流 MSN:[email protected]

你可能感兴趣的:(exception,layout,null,JavaME,transition,2010)