快速业务通道

j2me进度条与线程化模型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
的话线程就和前台的UI紧密的耦合在一起了。与其这样,倒不如让后台线程去查询UI的状态。这 样UI并不关心到底是谁在后台维护他状态。

2)如果要实现一个不交互动画UI,那么显然这个UI是自维护的(也就是说UI单独有自己的绘画线程) 。为了能够实现这种情况,可以在show中开启线程,在exit中结束线程。对于交互UI,可以简单的忽略 exit方法。

下面给一个利用Form和Gauge实现的交互式UI(非自维护的),读者可以看看其中的细节,参照他可以 设计自己的用Canvas实现的,或者自维护的等等不同的实现。

ProgressGaugeUI.java

package com.favo.ui; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Gauge; /** * @author Favo * Preferences - Java - Code Style - Code Templates */ public class ProgressGaugeUI implements ProgressObserver, CommandListener { private static final int GAUGE_MAX = 8; private static final int GAUGE_LEVELS = 4; private static ProgressGaugeUI pgUI; private Form f; private Gauge gauge; private Command stopCMD; boolean stopped; boolean stoppable; int current; protected ProgressGaugeUI() { f = new Form(""); gauge = new Gauge("", false, GAUGE_MAX, 0); stopCMD = new Command("Cancel", Command.STOP, 10); f.append(gauge); f.setCommandListener(this); } public static ProgressGaugeUI getInstance() { if (pgUI == null) { return new ProgressGaugeUI(); } return pgUI; } public void reset() { current=0; gauge.setValue(0); stopped=false; setStoppable(false); setTitle(""); setPrompt(""); } public void updateProgress(Object param1) {//这里的参数设计为提示语 current=(current+1)%GAUGE_LEVELS; gauge.setValue(current * GAUGE_MAX/GAUGE_LEVELS); if(param1!=null && param1 instanceof String){ setPrompt((String)param1); } } public boolean isStoppable() { return stoppable; } public void setStoppable(boolean stoppable) { this.stoppable = stoppable; if(stoppable){ f.addCommand(stopCMD); }else{ f.removeCommand(stopCMD); } } public boolean isStopped() { return stopped; } public void setStopped(boolean stopped) { this.stopped=stopped; } public void setTitle(String title) { f.setTitle(title); } public void setPrompt(String prompt) { gauge.setLabel(prompt); } public void commandAction(Command arg0, Displayable arg1) { if(arg0==stopCMD){ if(isStoppable()) stopped=true; else{ setPrompt("can''t stop!"); } } } public void show(Display display) { display.setCurrent(f); } public void exit() { // 忽略 } public void setMax() { gauge.setValue(GAUGE_MAX); } }

j2me进度条与线程化模型(4)

时间:2011-08-11 FavoYang

后台线程的设计

后台线程替我们作以下的内容:

1)执行我们的任务runTask()

2)如果用户中断线程,那么runTask()运行完后,将会跳转到我们指定的失败屏幕

3)在最后替我们调用UI.exit()

我们需要做的:

1)提供一个前台的UI,提供失败后跳转的画面,提供Display的实例

2)在runTask()中,如果任务完成,手工跳转失败画面

3)在runTask()中,如果任务失败,手工跳转失败画面

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号