ZK 长时操作带进度条

LongProcess.zul:

<?xml version="1.0" encoding="UTF-8"?>
<window id="" border="normal">
    <button label="从1数到10">
        <attribute name="onClick">
            String url = "/Progressmeter.zul";
            Window window = (Window)Executions.createComponents(url, null, null);
            window.doModal();
        </attribute>
    </button>
</window>

Progressmeter.zul:

<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<window id="progresswindow" title="进度条显示" border="normal" width="500px" 
    apply="test.ImportUserProgressViewCtrl">
<vbox>
    <label id="progresslabel" value="正在处理中,请耐心等待……"/>
    <separator spacing="5px" />
    <progressmeter id="userprogress" width="400px" value="0"/>
</vbox>
</window>
</zk>

ImportUserProgressViewCtrl.java:

package test;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.util.GenericAutowireComposer;
import org.zkoss.zul.Label;
import org.zkoss.zul.Progressmeter;
import org.zkoss.zul.Window;

public class ImportUserProgressViewCtrl extends GenericAutowireComposer<Component>{

    private static final long serialVersionUID = 1L;

    private Window progresswindow;
    private Progressmeter userprogress;
    private Label progresslabel;
    
    @Override
    public void doAfterCompose(Component comp) throws Exception {
        // TODO Auto-generated method stub
        super.doAfterCompose(comp);
        
        // 启动进度条
        desktop.enableServerPush(true);
        Thread t1 = new Thread(new UserHandleThread(userprogress, progresswindow, progresslabel));
        t1.start();
    }
    
    class UserHandleThread implements Runnable {
        
        private Desktop dt;
        private Progressmeter pg;
        private Window win;
        private Label prglb;

        public UserHandleThread(Progressmeter watchpg, Window window, Label lb) {
            pg = watchpg;
            dt = watchpg.getDesktop();
            win = window;
            prglb = lb;
        }

        @Override
        public void run() {
            
                int rows = 10;
                //作为进度条区域值标准
                int[] rowslarge = new int[10];
                rowslarge[0] = (int) (rows * 0.1) >= 0 ? (int) (rows * 0.1) : 0;
                rowslarge[1] = (int) (rows * 0.2) >= 0 ? (int) (rows * 0.2) : 0;
                rowslarge[2] = (int) (rows * 0.3) >= 0 ? (int) (rows * 0.3) : 0;
                rowslarge[3] = (int) (rows * 0.4) >= 0 ? (int) (rows * 0.4) : 0;
                rowslarge[4] = (int) (rows * 0.5) >= 0 ? (int) (rows * 0.5) : 0;
                rowslarge[5] = (int) (rows * 0.6) >= 0 ? (int) (rows * 0.6) : 0;
                rowslarge[6] = (int) (rows * 0.7) >= 0 ? (int) (rows * 0.7) : 0;
                rowslarge[7] = (int) (rows * 0.8) >= 0 ? (int) (rows * 0.8) : 0;
                rowslarge[8] = (int) (rows * 0.9) >= 0 ? (int) (rows * 0.9) : 0;
                rowslarge[9] = (int) (rows * 1)   >= 0 ? (int) (rows * 1)   : 0;
                
                try {
                    //从1数到10
                    for (int i = 0; i <= rows; i++) {

                        if (i == rowslarge[0]) {
                            Executions.activate(dt);
                            pg.setValue(10);
                            prglb.setValue("已完成10%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[1]) {
                            Executions.activate(dt);
                            pg.setValue(20);
                            prglb.setValue("已完成20%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[2]) {
                            Executions.activate(dt);
                            pg.setValue(30);
                            prglb.setValue("已完成30%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[3]) {
                            Executions.activate(dt);
                            pg.setValue(40);
                            prglb.setValue("已完成40%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[4]) {
                            Executions.activate(dt);
                            pg.setValue(50);
                            prglb.setValue("已完成50%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[5]) {
                            Executions.activate(dt);
                            pg.setValue(60);
                            prglb.setValue("已完成60%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[6]) {
                            Executions.activate(dt);
                            pg.setValue(70);
                            prglb.setValue("已完成70%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        } else if (i == rowslarge[7]) {
                            Executions.activate(dt);
                            pg.setValue(80);
                            prglb.setValue("已完成80%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        }else if (i == rowslarge[8]) {
                            Executions.activate(dt);
                            pg.setValue(90);
                            prglb.setValue("已完成90%……");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        }else if (i == rowslarge[9]) {
                            Executions.activate(dt);
                            pg.setValue(100);
                            prglb.setValue("100%,导入成功,正自动关闭窗口,请稍等..");
                            Executions.deactivate(dt);
                            Thread.sleep(2);
                        }
                    }
                    Executions.activate(dt);
                    win.detach();
                    Executions.deactivate(dt);
                } catch (Exception e) {
                    // TODO: handle exception
                }
        }
    }
    
}

最终效果如下:

 

ZK 长时操作带进度条

更多相关文章
  • 谷歌云平台是使用容器进行分布式负载测试的极优环境,其使用的谷歌容器引擎以开源容器集群管理器Kubernetes为动力,将容器作为一级对象对其提供支持.使用容器引擎可以快速搭建容器基础设施,及管理应用部署与资源. 负载测试是开发后台基础架构的重要一环,它不但能够演示系统在真实需求面前的性能表现,还可以 ...
  • 上一篇:<CSS float属性小解——”浮“生若水> 写在前面: ~~强势插入~~如果有想进一步了解float属性的小伙伴,可以猛戳上面的链接,<CSS float属性小解——”浮“生若水>这篇文章加入了不少自己的想法,用例子讨论了float到底有没有脱离文档流这个问题,也 ...
  •   一.创建一个类public class Navigation{private string _siteName, _siteURL;public Navigation(string siteName, String siteURL){_siteName = siteName;_siteURL = ...
  • 2013年8月21日,"2013全球移动游戏及渠道博览会"将在北京国际会议中心隆重召开.本届大会目的是总结手机游戏和渠道在2013年上半年的发展和变化,探讨下半年的趋势与对策,促进横向交流,对接手游厂商和渠道,并发布行业数据,为下半年的最后冲刺再推动一把力.本次大会的主题确定为& ...
  • 1.开始正常监听以后,就要开始接受数据了,整体流程图如下:   2.上一节看到我们在程序初始化的时候,初始化了很多个SocketConnection,用于管理客户端的链接,那应用层如何来操作,又什么时候来接受数据?于是我们便有了SocketSession,用于给应用层来管理整个会话过程,代码如下: ...
  • 上一篇 内网渗透一:利用Xss漏洞进入内网(http://www.2cto.com/Article/201503/382831.html) 的文章里, 0x01填坑: 我在这里填一下上一篇文章中的坑哈: 我们使用了exploit/windows/browser/ie_execcommand_uaf ...
一周排行
  • 计算机病毒的产生过程可分为:程序设计-传播-潜伏-触发.运行-实行攻击.计算机病毒拥有一个生命周期,从生成开始到完全根除结束.下面我们描述病毒生命周期的各个时期. 开发期:在几年前,制造一个病毒需要计算机编程语言的知 ...
  • 3月29日,首届黑马运动会的现场,由"青年艺术100"艺术家亲手创作的一款进口克莱斯勒300C 3.0L艺术版车型进行拍卖,经过上百位创业者的竞拍,最后由丰厚资本创始合伙人杨守彬拍走,拍卖所得17 ...
  • 贺老师教学链接  C语言及程序设计提高 本课讲解函数的嵌套调用:函数内调用函数#include <stdio.h> int gcd(int n1, int n2); int lcm(int n1, int ...
  • 问题场景:eth0网卡无法自动加载,网卡配置信息不在network-scripts中 解决: 1>vi /etc/rc.d/rc.loacl 最后加入 ifup eth0 2>reboot 3>测试 ...
  • C++书籍太丰富了,以下是我精选推荐的.   一.C++入门普及篇: 1.<C++程序设计教程>(钱能-清华版) 讲解较为清析.简单,符合中国学生思路,价格便宜.但深度和广度欠佳,适合初学者. 2.< ...
  • 本报讯(实习记者 孙奇茹)惠普近日发布的第三财季财报显示,惠普净亏损为89亿美元,合每股4.49美元,营收为297亿美元,同比下降5%.据悉,为扭转亏损态势,惠普将加快裁员脚步,预计将于今年10月底裁员1.15万人. ...
  • STL中有push_back 等方法 可以将一个数据放入容器中. 在push_back中完成的是值拷贝,而不仅仅是地址的. #include <vector> #include <iostream& ...
  • 创造一个切切实实改变人类生活的产品通常都是过程曲折的.大致可以分为这几个阶段,基础科学的探索和突破:高校实验室或者军工领域的小规模实战,企业开始介入,尝试打开新的市场:某家公司率先推出一款成功产品,得到大众市场的认可 ...
  • 今天小编为大家带来了真三国无双7:猛将传下邳防卫战吕布秘密武器位置介绍,感兴趣的朋友们可以跟着小编去下文了解一下哦 <真三国无双7:猛将传>下邳防卫战吕布秘密武器的位置之前有介绍在水门附近,有玩家并没有找 ...
  • what is the output of all these program ?? 第一题 #include<stdio.h> char* bar (char *ptr) {    ptr += 3; ...