首页 > 其他分享 >Kuix 错误处理机制

Kuix 错误处理机制

时间:2022-10-21 13:05:26浏览次数:60  
标签:Kuix kalmeo ExceptionFrame org 错误处理 机制 public

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

记得一位企业家说过:“我去参观别的公司,衡量这个公司文化的标准就看两个地方:一个是食堂,另一个是厕所。”。作者非常认同这个观点。同样,任何优秀的软件,它拥有的应该不仅仅是华丽的外表、强大的功能,还应该有对错误处理的支持。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,kalmeo,ExceptionFrame,org,错误处理,机制,public
From: https://blog.51cto.com/defonds/5782383

相关文章

  • 黑盒变白盒 - 调试 Red5 项目时查看 Red5 容器内部运行机制
        《​​如何使用Red5插件创建Red5项目?​​​》介绍了如何在Eclipse下创建并调试Red5项目。有同学问,“我想在调试Red5应用程序......
  • JVM垃圾回收机制
    Jvm虚拟机的垃圾回收机制1.垃圾回收发生在哪里?首先就需要知道Jvm的内存结构了:有五种(方法区、堆、虚拟机栈、本地方法栈、程序计数器);new就进堆,堆存储对象数据,而垃圾回收......
  • Webpack中的plugin插件机制
    大家有没有遇到过这些问题:webpack打包之后的文件没有压缩静态文件要手动拷贝到输出目录代码中写了很多环境判断的多余代码上一篇「webpack核心特性」loader说到......
  • 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理
    二、Java并发机制底层实现原理这里是我的《Java并发编程的艺术》读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一、并发编程的目的与挑战有兴趣讨论的朋友可以......
  • Java 垃圾回收机制
    一、垃圾回收之标记算法 1.引用计数法通过判断对象的引用数量来决定对象是否被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1  优点:执行效率高,程......
  • 14.ElasticSearch系列之分布式特性及分布式搜索机制(三)
    1.刨析分布式查询及相关性算分1.1分布式搜索的运行机制ElasticSearch的搜索,会分为两阶段进行第一阶段Query第二阶段FetchQueryThenFetch1.2Query阶段......
  • 11.ElasticSearch系列之搜索相关性算分机制
    1.相关性和相关性算分1.1相关性搜索的相关性算分,描述了一个文档和查询语句匹配的程度。ES会对每个匹配查询条件的结果进行算分_score打分的本质是排序,需要把最符合用......
  • 病毒&windows,linux机制
    前言以病毒流氓软件为引,了解windows,linux机制流氓软件p2p软件园360全家桶等等彻底删除文件,程序程序不要用系统带的卸载找到他本身程序的卸载exe,推荐用geek会自......
  • 考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(Matlab代码实现)
                  【现在公众号名字改为:荔枝科研社】快速查找电气代码的方法(以微电网调度和电力系统潮流计算为例):         ......
  • Javascript中的反射机制(五)
    一:什么是反射机制反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。二:在JavaScript中利用for(…in…)语句实现......