快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

4)在runTask()中改变进度栏的状态。

5)在runTask()中查询用户是否取消,如果用户取消,应该尽快退出runTask()

这种模型职责清晰,便于使用。但也有一个缺点:如果用户取消了任务,但是此时任务接近完成,或 者已经完成。后台线程依然会显示用户取消了任务,并将会跳转到我们指定的失败屏幕。这时候会产生不 一致的情况。为了解决整个问题,程序员可以在runTask()中调用taskComplete()来强制完成任务。这样 即使用户取消了任务,依然回显示任务成功。当然你也可以不掉用taskComplete()遵循默认的行为特点。

BackgroundTask.java

package com.favo.ui; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Alert; /** * @author Favo * Preferences - Java - Code Style - Code Templates */ public abstract class BackgroundTask extends Thread { ProgressObserver poUI; protected Displayable preScreen; protected boolean needAlert; protected Alert alertScreen; private Display display; public BackgroundTask(ProgressObserver poUI, Displayable pre, Display display) { this.poUI = poUI; this.preScreen = pre; this.display = display; this.needAlert = false; } public void run() { try { runTask(); } catch (Exception e) { Alert al = new Alert("undefine exception", e.getMessage(), null, AlertType.ALARM); al.setTimeout(Alert.FOREVER); display.setCurrent(al); } finally { if (poUI.isStoppable()) { if (poUI.isStopped()) {//如果用户中断了程序 if (needAlert) { display.setCurrent(alertScreen, preScreen); } else { display.setCurrent(preScreen); } } } poUI.exit(); } } /* * 如果任务可中断,查看pgUI.isStopped().并尽快退出此方法; * 如果任务需要更新进度栏,调用pgUI.updateProgress(“进度提示”). * 习惯上此方法的最后手动调用taskComplete()以防止用户在任务接近 * 完成时取消 */ public abstract void runTask(); /** * 这是一个偷懒的办法,当你构造好BackgroundTask对象后,直接调用这个方法, *可以帮助你初始化 进度UI,并显示出来。之后启动你的任务线程 */ public static void runWithProgressGauge(BackgroundTask btask, String title, String prompt, boolean stoppable, Display display) { ProgressObserver po = btask.getProgressObserver(); po.reset(); po.setStoppable(stoppable); po.setTitle(title); po.setPrompt(prompt); po.show(display); btask.start(); } public ProgressObserver getProgressObserver() { return poUI; } public void taskComplete(){ getProgressObserver().setStopped(false); } }

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

时间:2011-08-11 FavoYang

如何使用

1)产生一个ProgressObserver 对象poUI

如果用默认的,通过调用ProgressGaugeUI.getInstance();

2)构造BackgroundTask对象bkTask,一般可以用匿名类来实现。

3)初始化poUI设置后字段显示你的poUI开启bkTask线程。

第三步可以用一步完成,通过调用静态方法

BackgroundTask.runWithProgressGauge(bkTask, "标题",

"提示", 是否可以暂停, display);

下面一个例子,看看你是否理解了,并且会使用了。

TestProgressGauge.java package com.favo.ui; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microediti

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号